Si fopen
renvoie NULL, le fichier n'est pas ouvert; vous passez NULL
à ferror
, ce qui est invalide. Vous n'avez pas de fichier ouvert à transmettre; c'est ce que NULL
signifie, qu'il ne pourrait pas vous donner un pointeur de fichier. ferror
est pour obtenir des erreurs liées à la lecture et à l'écriture du fichier, une fois qu'il a été ouvert et que vous avez le fichier pour travailler avec.
Si fopen
échoue, et si vous souhaitez obtenir plus d'informations sur la raison, vous devez vérifier le errno
global variable, défini dans errno.h
.
#include <errno.h>
// ...snip...
if (file == NULL)
printf("Error READING FILE: %s\n", strerror(errno));
Cet exemple montre comment extraire une chaîne décrivant l'erreur; vous pouvez également comparer la valeur de errno
avec l'une des valeurs possibles, et faire quelque chose de différent en fonction de l'erreur. Voir le fopen
man page, ou le POSIX spec, pour une liste d'erreurs possibles à comparer. Voici comment vous pouvez vérifier contre diverses erreurs possibles:
if (file == NULL) {
int error = errno; // copy it so other calls like printf don't modify it
printf("Error READING FILE: %s\n", strerror(error));
switch (error) {
case EACCESS:
// access was denied
break;
case ENOENT:
// the file or one of its ancestors doesn't exist
break;
// etc...
}
}
(c'est une extension de quelque chose j'ai écrit dans un commentaire sur une autre réponse)
pourquoi vous de poursuivre l'exécution après avoir trouvé ce fichier est 'NULL '? – Naveen