Der bereitgestellte Text erklärt den Unterschied zwischen der Verwendung eines Zeichenzeigers (char *string
) und einem Zeichenarray (char string[]
), um Zeichenfolgen in C. zu speichern und zu modifizieren.
Beispiel 1 (Segmentierungsfehler):
<code class="language-c">#include <stdio.h> int main(void) { char *string = "Wello, world!"; // string is a pointer string[0] = 'H'; // Attempting to modify a read-only string puts(string); }</code>
als string
Zeiger für einen Zeichen deklariert wird. Dieser Zeiger wird initialisiert, um auf einen String-Literal ("Wello, World!") Zu verweisen, der normalerweise im schreibgeschützten Speicher gespeichert ist. Der Versuch, den Inhalt dieses schreibgeschützten Speichers zu ändern
Dieser Code druckt erfolgreich "Hallo, Welt!". Hier wird
<code class="language-c">#include <stdio.h> int main(void) { char string[] = "Wello, world!"; // string is an array string[0] = 'H'; // Modifying a writable copy of the string puts(string); }</code>
Zeichenarray string
deklariert. Der Compiler verteilt Platz auf dem Stapel, um eine Kopie des Saitenliterales zu halten. Diese Kopie ist beschreibbar und ermöglicht eine Änderung von ohne einen Fehler zu verursachen.
string[0]
Der grundlegende Unterschied liegt darin, wie die Zeichenfolge gespeichert wird. In Beispiel 1 befindet sich das String Literal im schreibgeschützten Speicher, und der Zeiger zeigt einfach darauf. In Beispiel 2 wird ein beschreibbares
kopierendes String -Literales erstellt und im Array auf dem Stapel gespeichert.
Schlussfolgerung:Zeiger und Arrays sind unterschiedliche Datentypen in C. Während sie in einigen Kontexten ähnlich erscheinen können, kann ihr Verhalten signifikant unterschiedlich sein, insbesondere im Umgang mit String -Literalen. Achten Sie immer auf diese Unterscheidung, um unerwartete Fehler und Segmentierungsfehler zu vermeiden. Die Verwendung von Zeichenarrays für modifizierbare Zeichenfolgen ist im Allgemeinen sicherer als die Verwendung von Zeichenzeigern auf String -Literale.
Das obige ist der detaillierte Inhalt vonStrings in C zuweisen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!