strlen() vs. sizeof() in C: Verschillen begrijpen en correct gebruik
Wat is strlen()
In C retourneert strlen() het aantal karakters in een null-getermineerde string, exclusief de afsluitende '\0'. Het telt alfabetische karakters, cijfers, symbolen en spaties.
Dit artikel legt de rol van strlen(), sizeof() uit, en waarom ze zich anders gedragen.
- Definitie van
strlen() - Definitie van
sizeof() - Syntaxis voorbeelden
- Belangrijkste verschillen
Wat is sizeof()
De sizeof operator levert de grootte, in bytes, van zijn operand. Het wordt geëvalueerd tijdens compilatie voor statische types en tijdens runtime voor variable-length arrays. Het is van toepassing op alle C-datatypes, inclusief primitieven, pointers, structs, en unions. Het resultaat is van type size_t, een unsigned integer type gegarandeerd groot genoeg om de grootte van het grootste object te houden.
Omdat de grootte van types zoals int of double kan variëren tussen 32-bit en 64-bit systemen, zorgt sizeof voor draagbaarheid.
Belangrijkste verschillen
strlen()meet het aantal karakters in een string;sizeof()meet het geheugen dat een variabele of type inneemt.- Alleen
strlen()rekening houdt met de string's afsluitende'\0';sizeof()negeert inhoud. - De retouurtyp van
strlen()issize_t(vaak een 64-bit unsigned integer op moderne systemen);sizeof()retourneert ooksize_t. strlen()is een runtime-functie gedefinieerd instring.h;sizeofis een compile-tijd unaire operator.- Alleen
strlen()werkt op karakterarrays;sizeofwerkt met elk type.
Syntaxis van strlen()
size_t length = strlen(my_string);
Hier is my_string een karakterarray of pointer naar een null-getermineerde string.
Voorbeeld van strlen()
#include <stdio.h> #include <string.h> int main() { char strng[] = "January"; printf("Length of given string is: %zu\n", strlen(strng)); return 0; }
Output:
Length of given string is: 7
Syntaxis van sizeof()
1) sizeof(type)
sizeof(type) levert de grootte van het gespecificeerde type.
#include <stdio.h> #define my_sizeof(type) ((char*)(&type+1) - (char*)&type) int main() { double x; printf("%zu", my_sizeof(x)); return 0; }
Output:
8
2) sizeof(variabele)
Geef een variabelenaam door om het geheugenvoetafdruk te verkrijgen.
#include <stdio.h> int main() { printf("sizeof(char) = %zu\n", sizeof(char)); return 0; }
Output:
sizeof(char) = 1
3) sizeof(expressie)
Evalueer de typegrootte van een expressie zonder de waarde te berekenen.
#include <stdio.h> int main() { char p = 'S'; double q = 4.65; printf("Size of variable p : %zu\n", sizeof(p)); printf("Size of an expression : %zu\n", sizeof(p+q)); int a = (int)(p+q); printf("Size of explicitly converted expression : %zu\n", sizeof(a)); return 0; }
Output:
Size of variable p : 1 Size of an expression : 8 Size of explicitly converted expression : 4
Visuele vergelijking

Hieronder is een zij-aan-zij samenvatting van de twee constructen.
| Kenmerk | strlen() | sizeof() |
|---|---|---|
| Header bestand | string.h | Geen header vereist (ingebouwde operator) |
| Doel | Stringlengte berekenen (exclusief null) | Geheugengrootte van type of variabele bepalen |
| Retouurtyp | size_t | size_t |
| Evaluatietijd | Runtime (kan string doorlopen) | Compile-tijd (behalve VLA) |
| Toepasbaar op | Alleen karakterarrays of pointers naar null-getermineerde strings | Alle datatypes en expressies |
Wanneer welke gebruiken
- Gebruik
strlen()wanneer je de logische lengte van een string nodig hebt, zoals voor bufferallocatie, substring-extractie, of invoervalidatie. - Gebruik
sizeof()wanneer je de fysieke grootte van een datatype of variabele nodig hebt, bijvoorbeeld bij het kopiëren van geheugen metmemcpyof het alloceren van een blok geheugen voor een array van structs. - Onthoud dat
sizeof(char)altijd 1 byte is, de basiseenheid van geheugen in C. - Voor stringliteralen levert
sizeof("hello")6 op (vijf karakters plus null-terminator), terwijlstrlen("hello")5 oplevert.
Het volgen van deze richtlijnen zorgt voor efficiënte, draagbare en onderhoudbare C-code.
C Taal
- Hardlossen vs. Solderen: Belangrijkste Verschillen Uitgelegd
- 2-Takt vs 4-Takt Motoren: Belangrijkste Verschillen Uitgelegd
- DC vs AC Motoren Begrijpen: Belangrijkste Verschillen en Kookgids
- Asbest vs. Glasvezel: Belangrijke Verschillen, Toepassingen en Veiligheidsoverwegingen
- Structuren vs. Unions in C: Een Praktische Gids
- C# vs C++: Duidelijke Vergelijking van Kenmerken, Prestaties en Use Cases
- C vs. C++: Belangrijkste Verschillen & Wanneer Welke Te Kiezen
- C vs Java: Een uitgebreide vergelijking van functies, geschiedenis en toepassingen
- Python vs JavaScript: Belangrijkste Verschillen, Kenmerken en Wanneer Welke Te Kiezen
- Python vs Ruby: Uitgebreide Vergelijking van Features, Voordelen en Use Cases
- Python 2 vs Python 3: Belangrijkste Verschillen en De Juiste Versie Kiezen