Warum führt das Folgende zu Segmentierungsfehlern?

8
%Vor%

Warum temp[3]='F'; wird einen Segmentierungsfehler verursachen, da temp nicht const ?

ist     
cse 20.11.2010, 03:13
quelle

4 Antworten

9

Sie dürfen String-Literale nicht ändern.

    
Bill Lynch 20.11.2010, 03:14
quelle
0

* temp ist als Zeiger auf eine Konstante definiert (manchmal auch als String-Literal bezeichnet - besonders in anderen Sprachen).

Daher versucht die Zeile mit dem Fehler das dritte Zeichen dieser Konstante zu ändern.

Versuchen Sie, ein char-Array zu definieren und verwenden Sie strcpy, um temp in dieses Array zu kopieren. Dann mache den obigen Code auf dem Array, es sollte funktionieren. (Entschuldigung, mein iPad hier möchte keinen Code in die SO-Schnittstelle einfügen)

    
winwaed 20.11.2010 03:19
quelle
0

Wie Sie sehen können, ist temp ein Zeiger, der auf eine zufällige Adresse zeigt, wo sich das namenlose Array mit dem Wert Paras befindet. Und dieses Array ist eine String-Konstante.

Damit Ihr Programm funktioniert, müssen Sie anstelle eines Zeigers ein Array verwenden:

%Vor%

Wenn Sie sich jetzt fragen, warum es temp[6] statt temp[5] ist, initialisiert der obige Code eine Zeichenfolge und unterscheidet sich grundlegend von:

%Vor%

Strings werden mit einem Null-Terminator %code% beendet. Und die String-Initialisierung wird wie folgt aussehen:

%Vor%     
Ruel 20.11.2010 03:19
quelle
0
%Vor%

Diese Zeile ist nicht korrekt. Die "temp" ist ein konstanter Wert. Sie können sie also nicht ändern.

    
Tony 20.11.2010 03:38
quelle

Tags und Links