Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erzeugen „strlen“ und „sizeof“ unterschiedliche Ergebnisse für zeigerbasierte und arraybasierte Zeichenfolgen in C?

Warum erzeugen „strlen“ und „sizeof“ unterschiedliche Ergebnisse für zeigerbasierte und arraybasierte Zeichenfolgen in C?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-02 06:37:02186Durchsuche

Why do `strlen` and `sizeof` produce different results for pointer-based and array-based strings 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:

  • sizeof(str1) gibt 4 zurück, da es die Größe der Zeigervariablen auswertet, die normalerweise 4 Bytes beträgt (32-Bit-Systeme).
  • sizeof(str2) gibt 8 zurück, da es die Größe des Arrays bestimmt, das den Nullterminator enthält, was zu 8 Bytes (7 Zeichen 1 Nullterminator) führt.

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:

  • sizeof(str1) ist 4 (Zeigergröße)
  • sizeof(str2) ist 8 (Array-Größe mit Null-Terminator). )

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn