C'est dû au fait que le développeur a appelé une fonction qui touche à errno après celle qui avait positionné l'erreur; du coup errno est remis à 0 (success) et l'appel à perror() retourne Success.
exemple:
/* peut retourner ENOENT si le fichier n'existe pas, ou d'autres erreurs*/
FILE *fp = fopen("blah.txt","r");
if (fp == NULL) { unlink("blah.txt"); perror("fopen"); }
# perror()
Posté par Colin Leroy (site web personnel) . En réponse au journal Question qui me travaille .... Évalué à 9.
C'est dû au fait que le développeur a appelé une fonction qui touche à errno après celle qui avait positionné l'erreur; du coup errno est remis à 0 (success) et l'appel à perror() retourne Success.
exemple:
/* peut retourner ENOENT si le fichier n'existe pas, ou d'autres erreurs*/
FILE *fp = fopen("blah.txt","r");
if (fp == NULL) { unlink("blah.txt"); perror("fopen"); }
comme unlink aura réussi, on aura "Success".
FILE *fp = fopen("blah.txt","r");
if (fp == NULL) { perror("fopen"); unlink("blah.txt"); }
Fonctionne mieux. Souvent la logique de la fonction est plus compliquée et du coup on peut en laisser passer.