


Warum erzeugen „strlen' und „sizeof' unterschiedliche Ausgaben für Zeiger und Arrays in C?
Unterschiedliche Ausgaben von Strlen und Sizedof aufgrund der Zeiger- und Array-Initialisierung
In der C-Programmierung liefern die Funktionen sizeof und strlen Informationen über die Größe und Länge der Datentypen bzw. Beim Umgang mit Zeigern und Arrays können sich die Ausgaben dieser Funktionen jedoch unterscheiden, was zu Verwirrung führt.
Betrachten Sie das folgende Beispiel:
<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>
Die Ausgabe dieses Codes lautet:
7 4 7 8
Erklärung:
- Str1 (Zeigerinitialisierung): str1 wird als Zeiger auf das String-Literal „Sanjeev“ initialisiert. sizeof(str1) gibt die Größe eines Zeigers an, die in den meisten Architekturen 4 Byte beträgt. Andererseits gibt strlen(str1) die Länge der Zeichenfolge zurück, auf die str1 zeigt, also 7 (ohne das Null-Terminator ' ').
- Str2 (Array-Initialisierung): str2 wird als Zeichenarray der Länge 8 initialisiert. sizeof(str2) gibt die Größe dieses Arrays an, einschließlich des Nullterminators, der 8 Bytes beträgt. In ähnlicher Weise gibt strlen(str2) die Länge der im Array gespeicherten Zeichenfolge zurück, die ebenfalls 7 beträgt.
Um den Unterschied weiter zu verdeutlichen, betrachten Sie die folgende Änderung am Code:
<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>
In diesem Fall lautet die Ausgabe:
7 4 7 8
Auch wenn str1 und str2 jetzt auf denselben String verweisen, gibt sizeof(str1) immer noch die Größe eines Zeigers zurück. Dies liegt daran, dass str1 ein Zeiger ist, der auf das erste Element des Arrays zeigt, während str2 ein Array von Zeichen ist.
Das obige ist der detaillierte Inhalt vonWarum erzeugen „strlen' und „sizeof' unterschiedliche Ausgaben für Zeiger und Arrays in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?
