Nullkennzeichen am Ende eines Strings
-
Wie kann ich bei dem String eine 0 anhängen?
unsigned char string2 [17] ={"ABCDEFGHIJKLMNOP"};
unsigned char string2 [17] ={"ABCDEFGHIJKLMNOP"},0; ergibt eine Fehlermeldung
Gruß
Johann
-
Mit '\0'
-
Der String
unsigned char string2 [17] ={"ABCDEFGHIJKLMNOP"};
hat doch schon eine 0 hintendran (weil "" einen null-terminated string darstellt).
Besser wäre aber:
unsigned char string2 [] ={"ABCDEFGHIJKLMNOP"};
also ohne Längenangabe.
Oder man ersetzt das letzte Zeichen im String mit der 0:
string2[strlen (string2)] = '\0';
Blackbird
-
Blackbird schrieb:
Oder man ersetzt das letzte Zeichen im String mit der 0:
string2[strlen (string2)] = '\0';
An dieser Stelle steht sowieso schon '\0' , denn sonst
wuerde strlen nicht funktionieren.
-
Blackbird schrieb:
Oder man ersetzt das letzte Zeichen im String mit der 0:
string2[strlen (string2)] = '\0';
Blackbird
Das letzte Zeichen in einem String hat die Position strlen(str) -1.
In deinem Bsp. hat man den IndexOutOfBounds error.
-
@luser,
das hatte ich ja geschrieben, daß bei dieser Initialisierung das letzte Zeichen bereits \0 ist.Bei Zeichenkettenmanipulationen kann es schon mal vorkommen, daß man, um sicherzugehen, das letzte Zeichen einfach "hart" auf \0 setzt. Und bei den WinApi-Funktionen ReadPrivateProfileSection u.a. sind am Ende sogar 2 \0 vorhanden, weil die Einzelstrings mit \0 getrennt sind.
Also irgendwo \0 einfügen oder rauslesen ist üblich.@gh0st124,
ja klar, Fehler von mir. Rechnen sollte man schon könnenBlackbird
-
strlen gibt die Länge des Strings ohne das '\0' zurück.
Also abgesehen von dem Punkt, dass strlen nur wie gewünscht funktioniert, wenn eine Zeichenkette nullterminiert ist (Durch die Nultermninierung wird ein array of char ja erst zu einer Zeichenkette bzw. einem C-String) ist die Indizierung bei:
string2[strlen (string2)] = '\0';
schon richtig gewesen.
Beispiel:int lenght; char string2[] = "string"; length = strlen(string); /*length ist jetzt 6 nicht 7!!*/ string2[strlen (string2)] = '\0'; /*hier passiert nichts, da string2[6] ja eh schon '\0' ist*/ string2[strlen(string2) - 1] = '\0'; /*jetzt überschreibt man das g!!!*/
Aber wie oben schon gesagt: von der semantik ist es natürlich schwachsinn!