Heim > Backend-Entwicklung > C++ > Hauptteil

Warum geben „strlen' und „sizeof' unterschiedliche Werte für die Zeiger- und Array-basierte String-Initialisierung in C zurück?

Susan Sarandon
Freigeben: 2024-11-01 07:14:02
Original
616 Leute haben es durchsucht

Why do `strlen` and `sizeof` return different values for pointer and array-based string initialization in C?

Unterschiedliche Antworten von strlen und sizeof für Zeiger- und Array-basierte Initialisierung von String [Duplikat]

In der Programmiersprache C beim Deklarieren von an Array und einem Zeiger auf einen String können mit den Funktionen „strlen“ und „sizeof“ unterschiedliche Ausgaben erzielt werden. Das Verständnis dieser Diskrepanz ist für eine effektive Speicherverwaltung und Datenverarbeitung von entscheidender Bedeutung.

Um diesen Unterschied zu veranschaulichen, betrachten Sie den folgenden Codeausschnitt:

char *str1 = "Sanjeev";
char str2[] = "Sanjeev";
printf("%d %d\n",strlen(str1),sizeof(str1));    
printf("%d %d\n",strlen(str2),sizeof(str2));
Nach dem Login kopieren

Die erzeugte Ausgabe wird sein:

7 4
7 8
Nach dem Login kopieren
Nach dem Login kopieren

Die Funktion „strlen“ gibt die Anzahl der Zeichen in der Zeichenfolge zurück, mit Ausnahme des Null-Terminators. In beiden Fällen enthält die Zeichenfolge 7 Zeichen. Die Funktion „sizeof“ hingegen gibt die Größe des Datentyps im Speicher zurück.

Für „str1“, einen Zeiger, gibt „sizeof(str1)“ die Größe der Zeigervariablen selbst zurück. Dies sind auf den meisten Systemen typischerweise 4 Byte. Dies liegt daran, dass „str1“ kein Array ist, sondern lediglich ein Zeiger auf die Zeichenfolge „Sanjeev“.

Im Gegensatz dazu ist „str2“ ein Array von Zeichen. „sizeof(str2)“ gibt die Größe des gesamten Arrays zurück, einschließlich des Nullterminators. Als Ergebnis werden 8 Bytes ausgegeben: 7 Bytes für die Zeichen und 1 Byte für den Nullterminator.

Um dieses Konzept besser zu verstehen, betrachten Sie den folgenden modifizierten Code:

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));
Nach dem Login kopieren

Dies Zu diesem Zeitpunkt lautet die Ausgabe:

7 4
7 8
Nach dem Login kopieren
Nach dem Login kopieren

Auch wenn „str1“ und „str2“ auf dieselbe Zeichenfolge verweisen, bleiben die „sizeof“-Ausgaben gleich. Dies liegt daran, dass „str1“ immer noch ein Zeiger ist und „str2“ ein Array bleibt. Die 'strlen'-Ausgabe bleibt für beide 7, da nur die Zeichen in der Zeichenfolge gezählt werden.

Das obige ist der detaillierte Inhalt vonWarum geben „strlen' und „sizeof' unterschiedliche Werte für die Zeiger- und Array-basierte String-Initialisierung in C zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!