Zum Inhalt springen

c++ strings?


Reality

Empfohlene Beiträge

wenn du es nicht kennst, solltest dir erst paar basics ansehen:
Bei einer so konkreten Frage auf eine Sammelseite für Tutorials zu verweisen, halte ich für etwas unangebracht.

Welchem Datentyp weist man denn dann eine Zeichenkette zu?
Dafür gibt es die Klasse std::string, die im Header <string> definiert ist.
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 5 Monate später...

Nein, das ist ganz ganz übel und sollte auch gar nicht vom Compiler akzeptiert werden weil dir c_str() einen const Zeiger zurück liefert.

Der Zeiger ist Konstant damit du nicht einfach so wild in internen String der Klasse rumschreibst und so über den reservierten Speicher hinausschreibst oder sonst irgendwas änderst was deine std::string Instanz zerstören würde.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hehe, danke *g*

gut zu wissen - denn ich hätts wohl so gemacht :>

Du kannst auch deinen std::string vorher groß genug dimensionieren, dann "funktioniert" auch das sprintf. Aber die alten C-Funktionen sollten sowieso nicht mit STL-Sachen verwendet werden. Seit VS2500 wird man auch ständig vom Compiler dafür angeblafft ;)

Der saubere Weg ist der stringstream!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst auch deinen std::string vorher groß genug dimensionieren, dann "funktioniert" auch das sprintf.
Das mag auf die eine oder andere STL-Implementierung zutreffen. Aber der Standard garantiert weder, dass der Speicher eines std::string am Stück vorliegt, noch dass der Speicher nur diesem einen std::string gehört, und sich nicht mehrere Strings den Speicher teilen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mag auf die eine oder andere STL-Implementierung zutreffen. Aber der Standard garantiert weder, dass der Speicher eines std::string am Stück vorliegt, noch dass der Speicher nur diesem einen std::string gehört, und sich nicht mehrere Strings den Speicher teilen.

Naja, zumindest ist nicht sichergestellt, dass c_str den tatsächlichen Puffer des strings zurückliefert. Dass c_str einen zusammenhängenden Speicherbereich referenziert ist dagegen garantiert (nullterminiertes array).

Wie gesagt ist die zu empfehlende Methode aber der stringstream!

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

itoa ist nutzlos weil es als 2. Parameter einen char Pointer erwartet wo es den umgewandelten String speichern soll. Das heißt man müsste das erst im C-String speichern um es dann dem std::string zuzuweisen. Das wiederum bedeutet das man entweder erstmal prüfen muss wieviele Stellen man für den C-String reservieren muss oder einen anlegen muss der in jedem Fall passt, so oder so ist das verschwendung weil es anders einfacher geht :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

käme auf die Implementierung an. Welcher der beiden Methoden mehr Speicherplatz benötigt möchte ich nicht unbedingt vorhersagen wollen.

Und soviel mehr zu schreiben ist es letzendlich auch nicht.


char buf[20];

std::string s = _itoa(10, buf);

Das ist unsicherer C-Code!!! Hat das mal jemand auf einem 64 Bit-System ausprobiert? Hat da der standard-int 64 Bit? Das wären dann 20 Stellen, evtl. mit Vorzeichen und zack würd's hier krachen! Kommt natürlich auf den Compiler an, was der aus dem Code bastelt - ob er immer einen 32-Bit int nimmt, oder das, was auf dem System standard ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

sooo, hier kommt der test:


printf("int: %d\n", sizeof(int)*8);
printf("long int: %d\n", sizeof(long int)*8);
[/PHP]

ergibt folgenden output:

# g++ test.c -o test

# ./test

int: 32

long int: 64

und noch der beleg dafür, dass es eine 64Bit Maschine ist:

# file test

test: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (uses shared libs), not stripped

und

# cat /proc/cpuinfo | grep "model name"

model name : AMD Athlon 64 X2 Dual Core Processor 4400+

model name : AMD Athlon 64 X2 Dual Core Processor 4400+

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...