2011-08-08 5 views
0

salut je suis programmation avec stdlib sous linux.avertissement: fopen() appel

Le gcc émet l'avertissement suivant pour la ligne de code suivante, aucune idée pourquoi?

FILE *fd; 
if (fd = fopen(filename, "rw")== NULL) 
{ 

et l'avertissement est:

warning: assignment makes pointer from integer without a cast. 

Comment cela peut être se produire, selon la documentation stdlib le type de retour de fopen est le fichier *. Alors pourquoi y a-t-il encore un avertissement? Une idée?

--Thanks En Advance--

Répondre

6

Essayez

if ((fd = fopen(filename, "rw")) == NULL) 
    ^      ^

Sinon fd prendra la valeur 0 ou 1 et le FILE * lui-même retourné par fopen sera perdu. Donc, sans ces parenthèses, le résultat de la comparaison sera stocké dans fd au lieu du FILE * lui-même.

+0

Worth à noter que == a une priorité supérieure à =. C'est comme ça que c'est exécuté en premier. – taskinoor

+0

@taskinoor Merci pour votre clarification. – cnicutar

1

Vous attribuez essentiellement fd à fopen(filename, "rw") == NULL, car une expression conditionnelle est un entier (0 ou 1), vous affectez un pointeur à partir d'un entier. suivez @ la réponse de cnicutar pour le correctif

0
FILE *fd; 
if ((fd = fopen(filename, "rw"))== NULL) 
{ 

copie juste ce code, il fonctionnera .... vous oubliez simplement de mettre() ARROUND "fd = fopen (nom de fichier, "rw")"