strlen() vs. sizeof() in C: Unterschiede verstehen und richtig anwenden
Was ist strlen()?
In C gibt strlen() die Anzahl der Zeichen in einem null-terminierten String zurück, ohne das abschließende '\0' zu zählen. Es werden Buchstaben, Ziffern, Symbole und Leerzeichen gezählt.
Dieser Artikel erklärt die Rolle von strlen(), sizeof() und warum sie sich unterschiedlich verhalten.
- Definition von
strlen() - Definition von
sizeof() - Syntax-Beispiele
- Wesentliche Unterschiede
Was ist sizeof()?
Der sizeof-Operator liefert die Größe seines Operanden in Bytes. Er wird zur Kompilierzeit für statische Typen und zur Laufzeit für Variable-Length-Arrays evaluiert. Er gilt für alle C-Datentypen, einschließlich Primitiven, Zeigern, Structs und Unions. Das Ergebnis ist vom Typ size_t, ein vorzeichenloser Integer-Typ, der groß genug ist, um die Größe des größten Objekts zu halten.
Da die Größe von Typen wie int oder double zwischen 32-Bit- und 64-Bit-Systemen variieren kann, gewährleistet sizeof Portabilität.
Wesentliche Unterschiede
strlen()misst die Zeichenanzahl eines Strings;sizeof()misst den von einer Variable oder einem Typ belegten Speicher.- Nur
strlen()beachtet den String-Terminator'\0';sizeof()ignoriert den Inhalt. - Rückgabetyp von
strlen()istsize_t(typischerweise 64-Bit-unsigned auf modernen Systemen);sizeof()gibt ebenfallssize_tzurück. strlen()ist eine Laufzeitfunktion ausstring.h;sizeofist ein Kompilierzeit-Unäroperator.strlen()arbeitet nur auf Zeichenarrays;sizeoffunktioniert mit jedem Typ.
Syntax von strlen()
size_t length = strlen(my_string);
Hier ist my_string ein Zeichenarray oder Zeiger auf einen null-terminierten String.
Beispiel für strlen()
#include <stdio.h>
#include <string.h>
int main() {
char strng[] = "January";
printf("Länge des Strings: %zu\n", strlen(strng));
return 0;
}
Ausgabe:
Länge des Strings: 7
Syntax von sizeof()
1) sizeof(type)
sizeof(type) liefert die Größe des angegebenen Typs.
#include <stdio.h>
#define my_sizeof(type) ((char*)(&type+1) - (char*)&type)
int main() {
double x;
printf("%zu", my_sizeof(x));
return 0;
}
Ausgabe:
8
2) sizeof(variable)
Variablennamen übergeben, um ihren Speicherbedarf zu ermitteln.
#include <stdio.h>
int main() {
printf("sizeof(char) = %zu\n", sizeof(char));
return 0;
}
Ausgabe:
sizeof(char) = 1
3) sizeof(expression)
Größe des Ausdruckstyps ermitteln, ohne dessen Wert zu berechnen.
#include <stdio.h>
int main() {
char p = 'S';
double q = 4.65;
printf("Größe von Variable p: %zu\n", sizeof(p));
printf("Größe eines Ausdrucks: %zu\n", sizeof(p+q));
int a = (int)(p+q);
printf("Größe explizit konvertiert: %zu\n", sizeof(a));
return 0;
}
Ausgabe:
Größe von Variable p: 1 Größe eines Ausdrucks: 8 Größe explizit konvertiert: 4
Visueller Vergleich

Nachfolgend eine tabellarische Gegenüberstellung:
| Merkmal | strlen() | sizeof() |
|---|---|---|
| Header-Datei | string.h | Keine nötig (eingebauter Operator) |
| Zweck | Stringlänge berechnen (ohne Null) | Speichergröße von Typ/Variable bestimmen |
| Rückgabetyp | size_t | size_t |
| Evaluationszeitpunkt | Laufzeit (kann String durchlaufen) | Kompilierzeit (außer VLA) |
| Anwendbar auf | Nur Zeichenarrays/Zeiger auf null-terminierte Strings | Alle Datentypen und Ausdrücke |
Wann was verwenden?
strlen()nutzen, wenn Sie die logische Länge eines Strings benötigen – z. B. für Pufferallokation, Substring-Extraktion, Eingabevalidierung.sizeof()nutzen, wenn Sie die physische Größe eines Datentyps oder einer Variable brauchen – z. B. beim Kopieren mitmemcpyoder Allokieren eines Arrays von Structs.- Beachten Sie:
sizeof(char)ist immer 1 Byte, die Basiseinheit des Speichers in C. - Bei String-Literalen liefert
sizeof("hello")6 (5 Zeichen + Nullterminator), währendstrlen("hello")5 liefert.
Die Beachtung dieser Richtlinien sorgt für effizienten, portierbaren und wartbaren C-Code.
C Sprache
- Asbest vs. Glasfaser: Wichtige Unterschiede, Anwendungen und Sicherheitsaspekte
- Structures vs. Unions in C: Ein praktischer Leitfaden
- C# vs C++: Klare Vergleich von Features, Performance und Use Cases
- C vs. C++: Wichtige Unterschiede & Wann welche Sprache wählen
- C vs. Java: Umfassender Vergleich von Features, Geschichte und Anwendungen
- Python vs. JavaScript: Wichtige Unterschiede, Features und Entscheidungshilfen
- Python vs. Ruby: Umfassender Vergleich von Features, Vorteilen und Einsatzgebieten
- DC- vs. AC-Motoren: Wichtige Unterschiede & Kaufberatung
- Hartlöten vs. Weichlöten: Metallurgische Unterschiede und Praxiseinsatz
- Zweitakt- vs. Viertaktmotoren: Wichtige Unterschiede erklärt