Einzelnes Zeichenelement einer Zeichenkette ersetzen C [duplicate]
Lesezeit: 2 Minuten
Benutzer1163974
Ich versuche, etwas wirklich Grundlegendes in C zu tun, aber ich bekomme immer wieder einen Segmentierungsfehler. Alles, was ich tun möchte, ist, einen Buchstaben eines Wortes durch einen anderen Buchstaben zu ersetzen. Ersetzen Sie in diesem Beispiel das l durch ein L. Kann mir jemand erklären, wo ich falsch gelaufen bin? Es sollte ein wirklich grundlegendes Problem sein, denke ich, ich habe nur keine Ahnung, warum es nicht funktioniert.
Zeichenfolge1 Hallo
Zeichenfolge1[2] l
Segmentierungsfehler
Danke!
String1 ist ein Zeiger auf den Nur-Lese-Speicher (in den meisten Systemen), da es ein konstanter Initialisierer ist. Sie können nicht in diese Zeichenfolge schreiben, ohne sie vorher zu kopieren.
Nichts Großes, aber Sie können strdup(“hello”) anstelle eines Aufrufs von malloc und strcpy verwenden. strdup erledigt dies für Sie, es ist bequemer zu verwenden
– Zoneur
5. Februar 2012 um 13:32 Uhr
@Zoneur Yup, empfehle ich oft strdup aber es ist manchmal problematisch, weil es nicht Standard ist.
– Cnicutar
5. Februar 2012 um 13:33 Uhr
Wenn ich diesen Wert ändern möchte? “Hallo” bis “Helxo” funktioniert nicht
– Benutzer3402040
10. Mai 2017 um 11:48 Uhr
char *string1;
string1 = "hello";
string1 zeigt auf ein Zeichenfolgenliteral, und Zeichenfolgenliterale können nicht geändert werden.
Was Sie tun können, ist ein Array mit den Elementen eines Zeichenfolgenliterals zu initialisieren.
char string1[] = "hello";
die Elemente von string1 Array sind modifizierbar.
char *string1 = "hello";
Beim Ausführen des Codes befindet sich das Zeichenfolgenliteral in einem schreibgeschützten Abschnitt. Das Betriebssystem erlaubt dem Code nicht, diesen Speicherblock zu ändern, sodass Sie einen Seg-Fehler erhalten.
char string1[] = "hello";
Das Zeichenfolgenliteral wird beim Ausführen des Codes auf den Stapel geschoben.
string1[2] = 'L';
Sie versuchen, ein Zeichenfolgenliteral zu ändern, das in C ein undefiniertes Verhalten ist. Verwenden Sie stattdessen string1[]="hello";
Der Segmentierungsfehler, den Sie erhalten, liegt daran, dass das Literal wahrscheinlich im Nur-Lese-Bereich des Speichers gespeichert ist und der Versuch, darauf zu schreiben, ein undefiniertes Verhalten erzeugt.
14372900cookie-checkEinzelnes Zeichenelement einer Zeichenkette ersetzen C [duplicate]yes
String1 ist ein Zeiger auf den Nur-Lese-Speicher (in den meisten Systemen), da es ein konstanter Initialisierer ist. Sie können nicht in diese Zeichenfolge schreiben, ohne sie vorher zu kopieren.
– gage
16. April 2013 um 1:45 Uhr