strlen() vs sizeof() en C : Comprendre leurs différences et usage correct
Qu'est-ce que strlen() ?
En C, strlen() retourne le nombre de caractères dans une chaîne terminée par un caractère nul, en excluant le '\0' final. Il compte les lettres, chiffres, symboles et espaces.
Cet article explique le rôle de strlen(), sizeof() et pourquoi ils se comportent différemment.
- Définition de
strlen() - Définition de
sizeof() - Exemples de syntaxe
- Différences clés
Qu'est-ce que sizeof() ?
L'opérateur sizeof donne la taille, en octets, de son opérande. Il est évalué à la compilation pour les types statiques et à l'exécution pour les tableaux à longueur variable. Il s'applique à tous les types de données C, y compris les primitives, pointeurs, structures et unions. Le résultat est de type size_t, un type entier non signé garanti assez grand pour contenir la taille du plus grand objet.
Comme la taille des types comme int ou double peut varier entre systèmes 32 et 64 bits, sizeof assure la portabilité.
Différences clés
strlen()mesure la longueur logique d'une chaîne ;sizeof()mesure la mémoire occupée par une variable ou un type.- Seul
strlen()considère le terminateur'\0'de la chaîne ;sizeof()ignore le contenu. - Le type de retour de
strlen()estsize_t(généralement entier non signé 64 bits sur systèmes modernes) ;sizeof()retourne aussisize_t. strlen()est une fonction d'exécution définie dansstring.h;sizeofest un opérateur unaire de compilation.strlen()ne s'applique qu'aux tableaux de caractères ;sizeoffonctionne avec tout type.
Syntaxe de strlen()
size_t length = strlen(my_string);
Ici, my_string est un tableau de caractères ou un pointeur vers une chaîne terminée par nul.
Exemple de strlen()
#include <stdio.h>
#include <string.h>
int main() {
char strng[] = "January";
printf("Length of given string is: %zu\n", strlen(strng));
return 0;
}
Sortie :
Length of given string is: 7
Syntaxe de sizeof()
1) sizeof(type)
sizeof(type) donne la taille du type spécifié.
#include <stdio.h>
#define my_sizeof(type) ((char*)(&type+1) - (char*)&type)
int main() {
double x;
printf("%zu", my_sizeof(x));
return 0;
}
Sortie :
8
2) sizeof(variable)
Passez un nom de variable pour obtenir son empreinte mémoire.
#include <stdio.h>
int main() {
printf("sizeof(char) = %zu\n", sizeof(char));
return 0;
}
Sortie :
sizeof(char) = 1
3) sizeof(expression)
Évalue la taille du type d'une expression sans calculer sa valeur.
#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;
}
Sortie :
Size of variable p : 1 Size of an expression : 8 Size of explicitly converted expression : 4
Comparaison visuelle
Voici un résumé côte à côte des deux constructions :
| Caractéristique | strlen() | sizeof() |
|---|---|---|
| Fichier d'en-tête | string.h | Aucun requis (opérateur intégré) |
| But | Calculer la longueur de chaîne (hors nul) | Déterminer la taille mémoire d'un type ou variable |
| Type de retour | size_t | size_t |
| Moment d'évaluation | Exécution (peut parcourir la chaîne) | Compilation (sauf VLA) |
| Applicable à | Seulement tableaux de caractères ou pointeurs vers chaînes terminées par nul | Tous les types de données et expressions |
Quand utiliser lequel
- Utilisez
strlen()quand vous avez besoin de la longueur logique d'une chaîne, par exemple pour l'allocation de tampon, l'extraction de sous-chaîne ou la validation d'entrée. - Utilisez
sizeof()quand vous avez besoin de la taille physique d'un type ou variable, par exemple pour copier de la mémoire avecmemcpyou allouer un bloc pour un tableau de structures. - Rappelez-vous que
sizeof(char)vaut toujours 1 octet, l'unité de base de la mémoire en C. - Pour les littéraux de chaîne,
sizeof("hello")donne 6 (cinq caractères + terminateur nul), tandis questrlen("hello")donne 5.
Suivre ces directives garantit un code C efficace, portable et maintenable.
Langue C
- Amiante vs Fibre de Verre : Différences Clés, Utilisations et Considérations de Sécurité
- Structures vs Unions en C : Guide pratique
- C# vs C++ : Comparaison claire des fonctionnalités, performances et cas d'usage
- C vs C++ : Différences clés et quand choisir chacun
- C vs Java : Comparatif complet des fonctionnalités, de l'histoire et des applications
- Python vs JavaScript : Différences Clés, Fonctionnalités et Quand Choisir Chaque Langage
- Comprendre les Moteurs DC vs AC : Différences Clés et Guide d'Achat
- Brasage vs Soudure : Différences Clés Expliquées
- Moteurs 2 temps vs 4 temps : différences clés expliquées