In der C-Programmierung kann die Verwendung von Zeigern und Arrays zur Initialisierung von Strings zu unerwarteten Ungleichheiten in der führen Ausgaben von strlen und sizeof. Lassen Sie uns dieses Phänomen anhand eines konkreten Beispiels analysieren.
Das bereitgestellte Code-Snippet:
<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>
erzeugt die folgende Ausgabe:
7 4 7 8
Die Variationen entstehen aufgrund der grundlegende Unterschiede zwischen Zeigern und Arrays in ihrem Datentyp und der Objektgröße.
Zeiger (str1)
Array (str2)
Um diese Konzepte weiter zu veranschaulichen, ändern wir den Code leicht:
<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>
Dieser Code führt zu identischen Ergebnissen für str1 und str2 in Bezug auf strlen: 7. sizeof(str1) bleibt jedoch 4 und stellt die Speicheradresse dar, während sizeof(str2) sich auf 8 anpasst und weiterhin das nullterminierte Zeichen berücksichtigt.
Daher besteht die wichtigste Erkenntnis darin, die unterschiedlichen Datentypen und Größenmerkmale von Zeigern und Arrays zu verstehen, wenn in der C-Programmierung mit Zeichenfolgen gearbeitet wird.
Das obige ist der detaillierte Inhalt vonWarum liefern „strlen' und „sizeof' unterschiedliche Ergebnisse für die Zeiger- und Array-String-Initialisierung in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!