Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Frage
07.07.2007
2011-11-02, 13:08:47
Hallo,
folgendes Beispiel erzeugt eine Access Violation unter Linux und Windows
int main(char* argv, int argc)
{
char* myText = "";
sprintf(myText, "Hello World");
printf("%s", myText);
return 0;
}
Was mache ich hier falsch? Sorry bin blutiger Anfaenger.
Exxtreme
2011-11-02, 13:14:31
Mach mal anstatt:
char* myText = "";
lieber:
char myText[12];
oder:
char* myText = "Hello World";
Dann sollte es klappen.
Hintergrund:
Mit "char* myText = """ wird nur ein einzelnes char-Zeichen reserviert. Wenn du versuchst 11 Zeichen reinzukopieren dann schmeisst das Betriebssystem eine Schutzverletzung weil du in Bereiche reinschreibst, die nicht dafür reserviert sind.
schleiftier
2011-11-02, 13:41:06
Die Erklärung stimmt so nicht.
Mit char* myText = ""; legst du einen Zeiger an, der auf einen String in deinem Binary zeigt. Genauer, auf einen String im Text-Segment. Dieses Segment ist read-only, daher die Access Violation. Die Länge des bei der Initialisierung in myText abgelegten Strings ist dabei egal.
Die Terminierung des Strings wäre auch noch zu beachten.
del_4901
2011-11-02, 19:18:42
char myText[12];
Ist Ok, da auf dem Stack alloziert
char* myText = "Hello World";
Ist nicht Ok, letzteres ist naemlich ein "Literal" und wird direkt mit in das Codesegment gepackt
Alternativ kann man den String auch mit (new/delete) auf dem Heap allozieren.
Die Methodensignatur stimmt auch nicht.
Es ist
int main(int argc, char **argv) { }
Gast II
2011-11-04, 13:23:12
Ist Ok, da auf dem Stack alloziert
...
Alternativ kann man den String auch mit (new/delete) auf dem Heap allozieren.
Nicht in C.
Hier gibt es malloc & Freunde / free
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.