Wieso muss man das machen und wie sieht sowas aus bzw. wie terminiere ich ein char? So eine richtige Erklärung habe ich noch nicht gefunden.
Wieso muss man das machen und wie sieht sowas aus bzw. wie terminiere ich ein char? So eine richtige Erklärung habe ich noch nicht gefunden.
Damit du und etliche andere Funktionen wissen wann der String vorbei ist damit man nicht über sein Ende schreiben kann(Buffer underrun). Strlen funktioniert z.B. so:Original geschrieben von xmarvel
Wieso muss man das machen und wie sieht sowas aus bzw. wie terminiere ich ein char? So eine richtige Erklärung habe ich noch nicht gefunden.
Solange kein '\0' auftritt (d.h. Ende des Strings) wird x um 1 erhöhtCode:int strlen(char *s) { int x=0; while (*s != '\0') { x++; s++; } return x; }
c ya,
Tobias
Edit: ähem...
Geändert von tkortkamp (08-12-2002 um 13:06 Uhr)
Ich weiß, dass du weiß, dass das nicht gehtOriginal geschrieben von tkortkamp Terminieren tust du ein char* mit buf[strlen(buf)-1] = '\0';
Aber du solltest das nicht von Leuten erwarten, die dazu eine Frage stellen.
Die übernehmen sonst 1-zu-1 diesen Code.
Ciao,
_
Qt/KDE Entwickler
Debian Benutzer
aha also gehe ich mal davon aus wenn ich ein char deklariere:Damit du und etliche andere Funktionen wissen wann der String vorbei ist damit man nicht über sein Ende schreiben kann(Buffer underrun)
char *a;
char [] b;
das dieser automatisch terminiert wird oder nicht ?
Wenn nicht würde den der folgende Code funktionieren um eine 0 terminierung vorzunehmen oder kann man das garnicht so manuell tuen?
MFGCode:char *a; a = "TEST"; sprintf(a,"%s\0",a); printf("%s",a);
xmarvel
Wenn Du den Zeiger/Array gleich bei der Deklarierung initialisierst, dann ja. Ansonsten zeigt a erst mal ins Nirvana und b führt zu einem Komplierfehler, da du das Array nicht initialisiert hast:Original geschrieben von xmarvel
aha also gehe ich mal davon aus wenn ich ein char deklariere:
char *a;
char [] b;
das dieser automatisch terminiert wird oder nicht ?
Code:char *a = "TEST"; char b[] = "TEST";Hast Du mal versucht, das Programm zu kompilieren und auszuführen ?Wenn nicht würde den der folgende Code funktionieren um eine 0 terminierung vorzunehmen oder kann man das garnicht so manuell tuen?
Nein, er würde in dem Fall nicht, da Du über das Ende des Arrays schreibst.
Wenn, dann musst Du einen temporäres char-Array anlegen, das die zusätzlichen Zeichen noch aufnehmen kann, die Du mit sprintf reinschreiben willst:
Gruß michaCode:char *a = "TEST"; char buf[strlen (a) + 1]; sprintf (buf, "%s\0", a); printf ("%s", buf);
IRC: irc.euirc.net #tux
Lesezeichen