STRLEN |
Longueur de la chaîne |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
size_t strlen(const char *str) |
Paramètres
Nom | Description |
---|---|
str | Ce paramètre permet d'indiquer la chaîne de caractères à calculer la longueur |
Description
Cette fonction permet de calculer la longueur de la chaîne de caractères.
Remarques
- La fonction strlen() renvoie la longueur de la chaîne de caractères terminée par un pointeur pointé par str. Le terminateur null n'est pas compté dans la longueur.
- Ne fonctionne qu'avec les chaînes C-style (char*) : strlen ne fonctionne pas avec std::string directement. Si on l'applique à std::string, il faut d'abord appeler .c_str() :
- std::string s = "Bonjour";
- size_t len = strlen(s.c_str()); // Correct
- Complexité en O(n) - attention aux performances : strlen parcourt la chaîne jusqu'au caractère '\0', donc sa complexité est O(n) (linéaire). Si la chaîne est très longue, l'appel répétitif de strlen peut être coûteux :
- Ne vérifie pas si le pointeur est valide : Si strlen est appelée sur un pointeur nul (nullptr), cela provoquera un comportement indéfini (crash du programme) :
- Retourne 0 pour une chaîne vide : Si la chaîne est vide (""), strlen retourne 0 car le premier caractère est déjà '\0'. Exemple :
- strlen ne modifie jamais la chaîne de caractères : strlen est une fonction de lecture uniquement : elle ne modifie jamais la chaîne passée en paramètre. Elle peut donc être utilisée en toute sécurité sur des chaînes const char* :
- Peut provoquer un dépassement de mémoire si la chaîne n'est pas terminée par '\0' Si strlen est appelée sur un tableau de char qui n'a pas de '\0', elle va continuer à lire la mémoire au-delà, provoquant un accès illégal ou un crash. Exemple de bogue :
- Alternatives modernes en C++ : En C++, il est recommandé d'utiliser std::string::length() ou std::string::size() plutôt que strlen pour manipuler des
chaînes de caractères. std::string garde en mémoire la longueur de la chaîne, ce qui permet une complexité O(1) au lieu de O(n) pour strlen. Exemple :
- std::string s = "Bonjour";
- std::cout << s.length(); // Plus efficace que strlen(s.c_str())
Cependant, il est préférable d'utiliser s.length() ou s.size() avec std::string, car ils sont plus sûrs et optimisés.
Il est préférable d'entreposer la valeur de strlen dans une variable avant la boucle.
Il faut toujours vérifier que le pointeur n'est pas nul avant d'appeler strlen :
Cela peut être utile pour vérifier si une chaîne est vide sans avoir à comparer avec nullptr.
C'est une bonne pratique d'utiliser des chaînes const char* pour éviter des modifications accidentelles.
Il faut toujours s'assurer qu'un '\0' est bien présent à la fin d'un tableau char.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :

- #include <iostream>
- #include <cstring>
-
- int main()
- {
- char * message = "ABC";
- std::cout << "LONGUEUR('Bonjour')=" << strlen("Bonjour") << std::endl;
- std::cout << "LONGUEUR(message)=" << strlen(message) << std::endl;
- std::cout << "LONGUEUR('Bonjour'+message)=" << (strlen("Bonjour") + strlen(message)) << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
LONGUEUR('Bonjour')=7LONGUEUR(message)=3
LONGUEUR('Bonjour'+message)=10
Voir également
Langage de programmation - C - Référence procédures et fonctions - strlen
Langage de programmation - C pour Linux - Référence procédures et fonctions - strlen
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 734.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 260.