Heim > Artikel > Backend-Entwicklung > Warum erzeugen „strlen“ und „sizeof“ unterschiedliche Ausgaben für Zeiger und Arrays in C?
Unterschiedliche Ausgaben von Strlen und Sizedof aufgrund der Zeiger- und Array-Initialisierung
In der C-Programmierung liefern die Funktionen sizeof und strlen Informationen über die Größe und Länge der Datentypen bzw. Beim Umgang mit Zeigern und Arrays können sich die Ausgaben dieser Funktionen jedoch unterscheiden, was zu Verwirrung führt.
Betrachten Sie das folgende Beispiel:
<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 dieses Codes lautet:
7 4 7 8
Erklärung:
Um den Unterschied weiter zu verdeutlichen, betrachten Sie die folgende Änderung am 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 lautet die Ausgabe:
7 4 7 8
Auch wenn str1 und str2 jetzt auf denselben String verweisen, gibt sizeof(str1) immer noch die Größe eines Zeigers zurück. Dies liegt daran, dass str1 ein Zeiger ist, der auf das erste Element des Arrays zeigt, während str2 ein Array von Zeichen ist.
Das obige ist der detaillierte Inhalt vonWarum erzeugen „strlen“ und „sizeof“ unterschiedliche Ausgaben für Zeiger und Arrays in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!