Heim > Artikel > Backend-Entwicklung > Warum geben „strlen()' und „sizeof()' unterschiedliche Ergebnisse für die String-Initialisierung in C zurück?
Verstehen der Diskrepanz in den Ergebnissen von strlen() und sizeof() für die String-Initialisierung
Bei der C-Programmierung gibt es oft eine Diskrepanz zwischen den Ergebnisse von strlen() und sizeof() beim Umgang mit Zeigern und Arrays, die als Strings initialisiert wurden. Dieses scheinbar widersprüchliche Verhalten kann durch das Verständnis der Natur von Zeigern und Arrays erklärt werden.
Betrachten Sie den bereitgestellten Beispielcode:
<code class="c">char *str1 = "Sanjeev"; char str2[] = "Sanjeev"; printf("%d %d\n", strlen(str1), sizeof(str1)); printf("%d %d\n", strlen(str2), sizeof(str2));</code>
Die Ausgabe für diesen Code lautet:
7 4 7 8
Die unterschiedlichen Ergebnisse für strlen() und sizeof() ergeben sich aus der Tatsache, dass str1 ein Zeiger auf einen String ist, während str2 ein Array von Zeichen ist.
Sizeof() vs. Strlen( ) für Zeiger
sizeof() bestimmt die Größe des Datentyps in Bytes. Im Fall eines char-Zeigers wie str1 gibt sizeof auf einem 32-Bit-System 4 zurück (8 auf einem 64-Bit-System), da ein Zeiger 4 (oder 8) Bytes Speicher belegt. Allerdings gibt strlen die Länge der Zeichenfolge zurück, auf die der Zeichenzeiger zeigt. Da die Zeichenfolge „Sanjeev“ 7 Zeichen hat, gibt strlen 7 zurück.
Sizeof() vs. Strlen() für Arrays
Im Gegensatz dazu ist str2 ein Array von Charaktere. sizeof(str2) gibt die Größe des gesamten Arrays zurück, das sowohl die Zeichen als auch den Nullterminator enthält (wird automatisch zu allen C-Strings hinzugefügt). Daher gibt sizeof(str2) 8 zurück (die Anzahl der Zeichen in „Sanjeev“ plus das Null-Terminator). strlen(str2) gibt außerdem 7 zurück, was der Länge der Zeichenfolge ohne den Nullterminator entspricht.
Zusätzliche Überlegungen
Um den Unterschied weiter zu veranschaulichen, betrachten Sie Folgendes Code:
<code class="c">char str2[8]; strncpy(str2, "Sanjeev", 7); char *str1 = str2; printf("%d %d\n", strlen(str1), sizeof(str1)); printf("%d %d\n", strlen(str2), sizeof(str2));</code>
In diesem Fall ist str1 nun ein Zeiger, der auf den Anfang des Zeichenarrays str2 zeigt. Wie zuvor gibt strlen(str1) 7 und sizeof(str1) 4 zurück. Allerdings gibt strlen(str2) auch 7 zurück, während sizeof(str2) immer noch 8 zurückgibt. Dies liegt daran, dass str2 ein Array und die Größe eines Arrays bleibt wird durch die Anzahl der darin enthaltenen Elemente bestimmt, unabhängig davon, ob diese tatsächlich verwendet werden.
Das obige ist der detaillierte Inhalt vonWarum geben „strlen()' und „sizeof()' unterschiedliche Ergebnisse für die String-Initialisierung in C zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!