STRERROR |
Chaine d'erreur |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
char *strerror(int noerr) |
Paramètres
Nom | Description |
---|---|
noerr | Ce paramètre permet d'indiquer le code de l'erreur |
Description
Cette fonction pointe sur le message d'erreur correspondant à «noerr».
Remarques
- La fonction strerror() renvoie un pointeur sur une chaîne de caractères définie par la mise en oeuvre associée à la valeur de noerr.
- ATTENTION ! Vous ne devez en aucun cas modifier la chaîne de caractères car vous risquez de faire planter votre programme ou créer une instabilité de système.
- Si vous souhaitez signaler un erreur au niveau de l'analyse du préprocesseur du compilateur, vous devez plutôt utiliser la directive de compilation «#error».
- Utilisation typique pour afficher des messages d'erreur : strerror est couramment utilisée pour afficher des messages d'erreur lorsqu'une
fonction standard échoue et définit errno. Exemple :
Si le fichier n'existe pas, cela affiche :
No such file or directory
- Retourne une chaîne statique partagée : strerror retourne un pointeur vers une chaîne statique, ce qui signifie que son contenu peut être
écrasé lors d'un autre appel. Exemple :
Pour éviter tout conflit, il faut copier la valeur si on veut la conserver.
- Ne prend pas en charge les erreurs personnalisées : strerror ne permet d'afficher que les erreurs standard du système définies par errno.h. Si une application a des codes d'erreur personnalisés, il faut utiliser une autre approche, comme un tableau de messages d'erreur personnalisés.
- Alternative plus sûre : strerror_r (POSIX) et std::strerror_s (C11) : strerror n'est pas thread-safe, car elle utilise une chaîne de caractères statique partagée. Les versions sûres sont :
- Ne fonctionne que sur les codes d'erreur connus : Si on passe un code d'erreur inexistant ou non supporté, strerror renvoie un message générique ou
un comportement indéfini, selon l'implémentation. Exemple :
- std::cout << strerror(9999) << std::endl;
Cela peut afficher un message par défaut comme "Unknown error" ou produire un résultat erroné.
- Différences entre systèmes d'exploitation : Le texte retourné par strerror peut varier selon le système d'exploitation et l'implémentation de
la bibliothèque standard. Par exemple, une erreur EACCES (permission refusée) peut donner :
Permission denied Sur Linux Permission refused Sur Windows Cela peut poser des problèmes pour les programmes multi-plateformes.
- Peut être remplacée par std::system_category en C++ moderne : En C++ moderne, la bibliothèque <system_error> offre une alternative plus propre avec std::system_category(). Exemple :
- #include <iostream>
- #include <system_error>
- int main() {
- std::error_code ec(ENOENT, std::system_category());
- std::cout << ec.message() << std::endl;
- }
strerror_r(int errnum, char* buf, size_t buflen) | POSIX |
std::strerror_s(char* buf, size_t buflen, int errnum) | C11 |
Exemple avec strerror_r :
Cette approche est plus portable et sécurisée que strerror.
Exemple
Voici quelques exemples de valeur que retourne cette fonction :

on obtiendra le résultat semblable suivant :
0 (EZERO) = Error 01 (EINVFNC) = Invalid function number
1 (ENOFILE) = No such file or directory
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - perror
Langage de programmation - C - Référence de procédures et fonctions - strerror
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 257.