Heim >Backend-Entwicklung >C++ >Warum erzeugen „strlen' und „sizeof' unterschiedliche Ergebnisse für zeigerbasierte und arraybasierte Zeichenfolgen in C?
Eindeutige Ausgaben bei Stringlängen- und -größenberechnungen für die zeigerbasierte und arraybasierte String-Initialisierung
Verstehen der Ergebnisse
Beim Erstellen einer zeigerbasierten Zeichenfolge str1 und einer arraybasierten Zeichenfolge str2 mit demselben Wert erzeugen die Funktionen strlen und sizeof unterschiedliche Ergebnisse. Insbesondere für die Deklarationen:
<code class="c">char *str1 = "Sanjeev"; char str2[] = "Sanjeev";</code>
strlen gibt 7 für str1 und str2 zurück, da es die Länge der Zeichenfolge misst, mit Ausnahme des Nullterminators ( ) am Ende.
sizeof liefert jedoch unterschiedliche Werte:
Der zugrunde liegende Unterschied : Datentyp versus Speicherzuordnung
sizeof misst die Größe des Datentyps, während strlen die Länge der Zeichenfolge misst. Im Fall von str1 handelt es sich um einen Zeiger auf ein Zeichen, sodass sizeof die Größe des Zeigers zurückgibt. Bei str2 handelt es sich um ein Array von Zeichen, daher gibt sizeof die Größe des gesamten Arrays zurück, einschließlich des Nullterminators.
Ein genauerer Blick
Um das zu demonstrieren Um die Unterscheidung zu verbessern, beachten Sie Folgendes:
<code class="c">char str2[8]; strncpy(str2, "Sanjeev", 7); char *str1 = str2;</code>
Jetzt zeigen sowohl str1 als auch str2 auf dasselbe Array. Ihre strlen-Werte sind 7, aber ihre sizeof-Werte unterscheiden sich:
Dies veranschaulicht, wie die Größenbewertung von der zugrunde liegenden Datenstruktur abhängt.
Das obige ist der detaillierte Inhalt vonWarum erzeugen „strlen' und „sizeof' unterschiedliche Ergebnisse für zeigerbasierte und arraybasierte Zeichenfolgen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!