Frage

habe ich diese Codezeile mehrfach verwendet (Update: wenn Zeichenfolge war ein Parameter an die Funktion), aber wenn ich versuche, es zu tun, jetzt habe ich einen Bus-Fehler erhalten (beide mit gcc und Klappern). Ich bin einen möglichst einfachen Code wiederzugeben;

char *string = "this is a string";
char *p = string;
p++;
*p='x'; //this line will cause the Bus error
printf("string is %s\n",string);

Warum kann ich das zweite Zeichen der Zeichenfolge ändern, um den p-Zeiger mit?

War es hilfreich?

Lösung

Sie versuchen nur Speicher zu ändern lesen (wo das Stringliteral gespeichert ist). Sie können stattdessen einen char-Array verwenden, wenn Sie diesen Speicher ändern müssen.

char str[] = "This is a string";
str[0] = 'S'; /* works */

  

Ich habe diese Zeile Code verwendet oft ..

Ich hoffe, sicher nicht. Allenfalls würden Sie eine segfault bekommen (ich sage „am besten“, weil Sie versuchen, Nur-Lese-Speicher zu modifizieren, nicht näher bezeichnete Verhalten ist, wobei in diesem Fall alles passieren kann, und ein Absturz ist das Beste, was passieren kann).

Wenn Sie einen Zeiger auf eine Zeichenfolge deklarieren wörtlichen er zeigt nur Speicher im Datensegment (Blick auf der Baugruppe ausgegeben, wenn Sie mögen) zu lesen. Deklarieren Ihre Art als char [] wird diese wörtliche Kopie auf den Stapel der Funktion, die wiederum ermöglicht es geändert werden, wenn nötig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top