Um diesen Fehler oder dieses Problem zu verstehen, sollten Sie zuerst den Unterschied zwischen Zeiger und Array kennen. Hier habe ich Ihnen zunächst die Unterschiede zwischen ihnen erklärt
String-Array
char strarray[] = "hello";
Das Speicherarray wird in fortlaufenden Speicherzellen gespeichert, die als [h][e][l][l][o][\0] =>[]
Speicherzelle mit einer Größe von 1 Zeichenbyte gespeichert sind, und auf diese fortlaufenden Speicherzellen kann hier mit dem Namen strarray zugegriffen werden. Hier enthält das Zeichenfolgenarray strarray
selbst alle Zeichen der darauf initialisierten Zeichenfolge In diesem Fall "hello"
können wir den Speicherinhalt leicht ändern, indem wir auf jedes Zeichen über seinen Indexwert zugreifen
`strarray[0]='m'` it access character at index 0 which is 'h'in strarray
und sein Wert wurde geändert, 'm'
so dass sich der Strarray-Wert in änderte"mello"
;
Ein Punkt, der hier zu beachten ist, dass wir den Inhalt des String-Arrays ändern können, indem wir Zeichen für Zeichen ändern, aber andere Zeichenfolgen nicht direkt wie folgt initialisieren können strarray="new string"
es ungültig ist
Zeiger
Wie wir alle wissen, zeigt der Zeiger auf den Speicherort im Speicher, der nicht initialisierte Zeiger auf den zufälligen Speicherort und nach der Initialisierung auf einen bestimmten Speicherort
char *ptr = "hello";
Hier wird der Zeiger ptr auf einen String initialisiert, bei "hello"
dem es sich um einen konstanten String handelt, der im Nur-Lese-Speicher (ROM) "hello"
gespeichert ist und daher nicht geändert werden kann, da er im ROM gespeichert ist
und ptr wird im Stapelabschnitt gespeichert und zeigt auf eine konstante Zeichenfolge "hello"
Daher ist ptr [0] = 'm' ungültig, da Sie nicht auf den Nur-Lese-Speicher zugreifen können
Ptr kann jedoch direkt mit einem anderen Zeichenfolgenwert initialisiert werden, da es nur ein Zeiger ist, sodass es auf eine beliebige Speicheradresse einer Variablen seines Datentyps verweisen kann
ptr="new string"; is valid