Komisches Zeichen in string
-
Hallo,
ich schreibe gerade zur Übung an ein paar string-Funktionen und habe jetzt das Problem, dass in meinem mit malloc() erzeugten String ein "komisches" Zeichen auftaucht.
Zunächst mal der Code:
typedef struct string { char *str; size_t size; ERRORCODE state; } string;
string string_create(const char *text) { string s; int count; s.state = SUCCESS; s.size = strlen(text); s.str = (char *) malloc(s.size + 1); if (s.str == NULL) { s.state = ALLOC_FAILED; return s; } else { for (count = 0; count < s.size; count++) { *(s.str + count) = text[count]; } s.str[count + 1] = '\0'; } return s; }
Wenn ich den erzeugten String in der main()-Funktion ausgeben lasse bekomme ich statt "TEST" "TEST=" ausgegeben.
string a = string_create("TEST"); printf("%s\n", a.str);
Das Zeichen wird auf diese Art und Weise nicht ausgegeben:
for (i = 0; i < a.size; i++) { printf("%c ", a.str[i]); }
Ich setze ja das Nullbyte, nur scheint da am Ende trotzdem was anderes zu stehen? Irgendjemand eine Idee?
-
Nach der Schleife ist die Schleifenbedingung nicht mehr erfüllt, d.h. count == s.size. Du setzt dein Nullbyte zu weit hinten, das +1 muss weg.
-
*facepalm* danke ...
-
Du kannst deine Schleife auch bis <= s.size laufen lassen, denn
text
hat ja auch das '\0' am Ende (sonst würde strlen nicht funktionieren).