2009-06-22 19 views
1

mögliche Dubletten:
Why does simple C code receive segmentation fault?
Modifying C string constants?Ändern einer C-String: Zugriffsverletzung

Warum dieser Code eine Zugriffsverletzung generieren?

int main() 
{ 
    char* myString = "5"; 
    *myString = 'e'; // Crash 
    return 0; 
} 
+0

Bevor ich diese Frage beantworte, möchte ich Sie fragen: Warum haben Sie beschlossen, die '5' in Anführungszeichen und das 'e' in Anführungszeichen zu setzen? – Sev

+5

Diese Frage wird einmal wöchentlich auf SO gestellt :), geben Sie mir eine Minute, um das Original zu finden, und ich werde Sie damit verlinken. –

+1

C oder C++? Zu wissen, in welcher Sprache Sie programmieren, wäre nützlich. –

Antwort

5

* mystring verweist offenbar auf schreibgeschützten statischen Speicher. C-Compiler können String-Literale im Read-Only-Speicher zuweisen, in den zur Laufzeit nicht geschrieben werden kann.

2

Zeichenfolgenliterale werden als konstant betrachtet.

0

Der richtige Weg, um Ihren Code zu schreiben ist:

const char* myString = "5"; 
*myString = 'e'; // Crash 
return 0; 

Sie sollten das Hinzufügen ‚const‘ immer überlegen, in solchen Fällen, so ist es klar, dass diese Zeichenfolge zu ändern, nicht spezifiziert Verhalten führen kann.