„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 16.11.2024
Durchsuche:879

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:

char *str1 = "Sanjeev";
char str2[] = "Sanjeev";

strlen gibt 7 für str1 und str2 zurück, da es die Länge der Zeichenfolge misst, mit Ausnahme des Nullterminators (\0) 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.

The Grundlegender 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 Unterscheidung besser, bedenken Sie:

char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;

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ößenauswertung von der zugrunde liegenden Datenstruktur abhängt.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3