Problème avec fopen
alicia
-
hibou57 Messages postés 132 Statut Membre -
hibou57 Messages postés 132 Statut Membre -
Bonjour,
je suis en train de travailler sur un projet en C sous Linux ...
En fait, j'aimerais ouvrir un fichier "fichier.txt"
J'ai un pointeur PTR sur une structure STRUCT qui contient un champ NOM de type char * :
typedef struct {
char * NOM;
} STRUCT;
STRUCT * PTR;
Ce champ contient la valeur "fichier.txt"
Pour ouvrir le fichier, je fais :
FILE * my_file = fopen(PTR->NOM,"r");
En faisant cela, le fichier ne s'ouvre pas, la fonction fopen me renvoie la valeur NULL alors que en faisant un printf, je vérifie bien que PTR->NOM vaut "fichier.txt"
Par contre, j'arrive à ouvrir correctement le fichier en faisant :
FILE * my_file = fopen("fichier.txt","r");
Merci de m'aider svp
je suis en train de travailler sur un projet en C sous Linux ...
En fait, j'aimerais ouvrir un fichier "fichier.txt"
J'ai un pointeur PTR sur une structure STRUCT qui contient un champ NOM de type char * :
typedef struct {
char * NOM;
} STRUCT;
STRUCT * PTR;
Ce champ contient la valeur "fichier.txt"
Pour ouvrir le fichier, je fais :
FILE * my_file = fopen(PTR->NOM,"r");
En faisant cela, le fichier ne s'ouvre pas, la fonction fopen me renvoie la valeur NULL alors que en faisant un printf, je vérifie bien que PTR->NOM vaut "fichier.txt"
Par contre, j'arrive à ouvrir correctement le fichier en faisant :
FILE * my_file = fopen("fichier.txt","r");
Merci de m'aider svp
2 réponses
Il faut que fichier.txt soit situé dans le même repertoire que ton exécutable pour que ca marche. En général on laisse à l'utilisateur le soin de choisir le nom du fichier en le passant en paramètre du programme
Bonne chance
#include <stdlib.h>
#include <stdio.h>
int main(int argc,char **argc){
FILE *f;
if(argc<2){
printf("usage : %s filename\n",argv[0]);
return 1;
}
f=fopen(argv[1],"r");
if (!f){
printf("%s : invalid filename\n",argv[1]);
return 2;
}
//je m'amuse avec f
//...
fclose(f);
return 0;
}
Bonne chance
En effet Alicia, c'est trés bizzare :-/
As tu vérifier que PTR->NOM est initialisé au bon endroit ? (i.e. avant son utilisation).
Vu que tu ne donne pas le code complet, on ne peut pas s'en assurer (même si à priori je te fais confiance pour ça).
Mais si tu donne le code complet, je peux essayer de le compiler chez moi des deux manières, pour voir si j'ai la même différence que toi.
Mais normalement, ça devrait marcher... c'est vraiment bizzare : peut-être un bug du compilateur.
As tu vérifier que PTR->NOM est initialisé au bon endroit ? (i.e. avant son utilisation).
Vu que tu ne donne pas le code complet, on ne peut pas s'en assurer (même si à priori je te fais confiance pour ça).
Mais si tu donne le code complet, je peux essayer de le compiler chez moi des deux manières, pour voir si j'ai la même différence que toi.
Mais normalement, ça devrait marcher... c'est vraiment bizzare : peut-être un bug du compilateur.