Problem mit Char-Array
-
Hallo zusammen !
ich bin grad auf folgendes Problem gestoßen:
char *us = new char[1]; int lengtha=strlen(us);
lengtha ist immer 5, obwohl *us vorher nirgends angelegt oder benutzt wird.
Kanns sich das jemand erklären ???
Danke
JoKne
-
ja, du hast ein tolles undefined behaviour. strlen sucht nach dem ersten \0 im speicher und bricht dort ab. dh irgendwo 4 bytes nach ende deines char arrays steht ne \0 im speicher. das könnte aber auch erst 10, 20,50,100,oder 3525 bytes später sein, und dein programm kann sich auch zwischenzeitlich dazu entschließen abzustürzen.
-
strlen ermittelt die länge eines strings indem ab beginn des string nach '\0' gesucht wird.
daher kann bei nicht initialisierten strings die länge nicht wirklich ermittelt werden.
-
jetzt hab ichs so gemacht:
char *us = " ";
Die Länge stimmt zwar, dafür kann ich nichts mehr reinschreiben:
us[0]=c;
gibt mir eine Unhandled Exception - Access Violation
please help :(:(
-
c ist übrigens ein beliebiger, vorher befüllter Character
-
das " " ist ein stringliteral, den darfst du nicht ändern!
-
@JoKne
Und wenn du das String Literal korrekterweise definiert hättestconst char us[] = " ";
wäre dir das auch gar nicht erst passiert.