Warum sind die Ergebnisse von sizeof() verschieden?
-
const char x[] = "Info"; const char* p = "Info"; int j = sizeof(x); // j == 5 int i = sizeof(p); // i == 4 // Compiliert mit VC VS2005
-
Silvester 2008 schrieb:
const char x[] = "Info"; const char* p = "Info"; int j = sizeof(x); // j == 5 int i = sizeof(p); // i == 4 // Compiliert mit VC VS2005
x ist ein array mit 5 bytes.
p ist ein zeiger und der hat immer 4 bytes, egal, auf was er zeigt. dieser zeigt auf den string "Info", der in der exe-datei liegt.x[1]='m'; geht. x ist ja auf dem stack.
p[1}='m'; sollte eine schutzverletzung auslösen, weil du in die exe-datei schreiben willst.
-
volkard schrieb:
p[1}='m'; sollte eine schutzverletzung auslösen, weil du in die exe-datei schreiben willst.
Ich dachte, das Verhalten beim Schreibzugriff auf String-Literale sei undefiniert? Es müsste also nicht zwingend zu einem Laufzeitfehler kommen...
Übrigens, die Stringlänge kannst du mit der Funktion
strlen()bestimmen. Das ist aber eher C, in C++ kannst du die Klassestd::stringnehmen, da hast du sogar zwei Funktionen zur Längenbestimmung zur Verfügung (size()undlength()).
-
Nexus schrieb:
Es müsste also nicht zwingend zu einem Laufzeitfehler kommen...
stimmt. hast recht. msvc6 unterschied da sogar zwischen debug- und release-mode, was dazu führte, daß ich mal ein schutzfehlerprogramm veröffentlicht hatte.

-
Danke für die Antwot!
volkard schrieb:
x[1]='m'; geht. x ist ja auf dem stack.
error C3892: "x": Einer Variablen, die konstant ist, kann nichts zugeordnet werden.

Guten Rutsch!
-
Silvester 2008 schrieb:
Danke für die Antwot!
volkard schrieb:
x[1]='m'; geht. x ist ja auf dem stack.
error C3892: "x": Einer Variablen, die konstant ist, kann nichts zugeordnet werden.

Guten Rutsch!
Dann nimm mal die const weg.
