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:
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:
Dies veranschaulicht, wie die Größenauswertung von der zugrunde liegenden Datenstruktur abhängt.
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