[C/C++]Probleme \0 et ouverture fichier
Dernière réponse : dans Programmation
Bonjour,
J'ai un petit probleme en C.
Je lit un fichier dont je recupere tous les chaines de caractere compri en " " ou <> et finissant par .h => donc les fichiers librairies.
Je les stockent dans un tableau de char * [] dans lequel je fai un malloc car je doi les reutiliser en dehors de la fonction.
Mais le probleme c'est que quand je veux faire une ouverture du fichier precedemment lu et stocké dans le tableau, ca ne marche pas(ca compile et s execute, mais pas comme je veu). J'ai tester en metant dans une variable char * le chemin en dur (normalement identique a celui lu) et la ca marche.
Donc pour moi c'est le caractere \0 en fin de ligne du chemin qui ne passe pas dans le fopen.
Comment resoudre ce probleme? Sinon comment enlever le caractere \0?
Merci d'avance
J'ai un petit probleme en C.
Je lit un fichier dont je recupere tous les chaines de caractere compri en " " ou <> et finissant par .h => donc les fichiers librairies.
Je les stockent dans un tableau de char * [] dans lequel je fai un malloc car je doi les reutiliser en dehors de la fonction.
Mais le probleme c'est que quand je veux faire une ouverture du fichier precedemment lu et stocké dans le tableau, ca ne marche pas(ca compile et s execute, mais pas comme je veu). J'ai tester en metant dans une variable char * le chemin en dur (normalement identique a celui lu) et la ca marche.
Donc pour moi c'est le caractere \0 en fin de ligne du chemin qui ne passe pas dans le fopen.
Comment resoudre ce probleme? Sinon comment enlever le caractere \0?
Merci d'avance
Autres pages sur : probleme ouverture fichier
Lassé par la pub ? Créez un compte
Le code est trop long pour etre montré.
Je lit un fichier .c et j'en extrait tous les fichiers .h (entre <> ou " ") que je stocke dans un tableau (char * [])
Je parcourt chaque element de ce tableau (donc chaque .h) et je veux tester s'il est present dans le repertoire.
l element courant est stocké dans char *op. Je fais donc un fopen(op,"r"); mais ca ne marche pas.
Par contre si je fait char *op = "./test.h" et fopen(op,"r"); => la ca marche
Donc je pense que cela est du au caractere nul a la fin de la premiere chaine
Je lit un fichier .c et j'en extrait tous les fichiers .h (entre <> ou " ") que je stocke dans un tableau (char * [])
Je parcourt chaque element de ce tableau (donc chaque .h) et je veux tester s'il est present dans le repertoire.
l element courant est stocké dans char *op. Je fais donc un fopen(op,"r"); mais ca ne marche pas.
Par contre si je fait char *op = "./test.h" et fopen(op,"r"); => la ca marche
Donc je pense que cela est du au caractere nul a la fin de la premiere chaine
boolean isIn(char *chemin){
boolean b = false;
FILE *temp = fopen(chemin,"r");
if(temp == NULL){
printf("Le fichier n'est pas à %s\n",chemin);
}
else if(temp != NULL){
printf("Le fichier est ici %s\n",chemin);
b = true;
}
return b;
}
int write(char * guill[],int taille,FILE *pFile){
....
for(q = 0;q<taille;q++){
....
isIn(guill[q]);
....
}
}
Dans ce cas il y a toujours : Le fichier n'est pas à ....
or si je met : char *op = "./test.h";isIn(op); la ca marche
Il y d'autre appel apres.
boolean b = false;
FILE *temp = fopen(chemin,"r");
if(temp == NULL){
printf("Le fichier n'est pas à %s\n",chemin);
}
else if(temp != NULL){
printf("Le fichier est ici %s\n",chemin);
b = true;
}
return b;
}
int write(char * guill[],int taille,FILE *pFile){
....
for(q = 0;q<taille;q++){
....
isIn(guill[q]);
....
}
}
Dans ce cas il y a toujours : Le fichier n'est pas à ....
or si je met : char *op = "./test.h";isIn(op); la ca marche
Il y d'autre appel apres.
ce qui serait sympa, c'est de regarder _exactement_ ce qu'il y a dans guill[q] au moment de l'appel...
tiens au fait, si le fopen a réussi, il ne faut pas oublier de faire fclose()
Edit :
d'ailleurs, sur échec de fopen, errno est positionné à (entre autre) :
EACCES, EINTR, EMFILE, ENFILE, ... (voir man fopen pour une liste complète)
il vaut quoi errno dans ton cas ?
tiens au fait, si le fopen a réussi, il ne faut pas oublier de faire fclose()
Edit :
d'ailleurs, sur échec de fopen, errno est positionné à (entre autre) :
EACCES, EINTR, EMFILE, ENFILE, ... (voir man fopen pour une liste complète)
il vaut quoi errno dans ton cas ?
Je sais que le NULL est inutile mais vu que ca marchai pas j'ai tout essayé,
Je sais pour le fclose mais ca je verrai apres.
Je sais pour le fclose mais ca je verrai apres.
boolean isIn(char *chemin){
boolean b = false;
FILE *temp = fopen(chemin,"r");
if(temp == NULL){
printf("Le fichier n'est pas à %s\n",chemin);
}
else{
printf("Le fichier est ici %s\n",chemin);
b = true;
fclose(temp);
}
return b;
}
int write(char * guill[],int taille,FILE *pFile){
....
for(q = 0;q<taille;q++){
....
isIn(guill[q]);
....
}
}
void open(char * file, FILE *pFile){
char * guill[256];
int si=0;
....
//Je stocke chaque occurence lu dans le tableau
....
write(sign,si,pFile);
}
Si c'est pour le stockage des infos :
Je lit avec un fgets
je teste s'il y a un #include avec un strcmp
Je cherche la 1er occurence de < ou " avec un strstr
Je remplace le \n par un \0
Le resultat de ceci se trouve dans la variable char *pos
et pour mettre l'element dans le tableau :
Je lit avec un fgets
je teste s'il y a un #include avec un strcmp
Je cherche la 1er occurence de < ou " avec un strstr
Je remplace le \n par un \0
Le resultat de ceci se trouve dans la variable char *pos
et pour mettre l'element dans le tableau :
guill[gui] = (char *)malloc(sizeof(char)*20);
strcpy(guill[gui],pos);
gui++;
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumProbleme ouverture fichier access
- ForumProbleme ouverture fichier excel
- ForumProbleme ouverture fichier powerpoint
- ForumProbleme reseau ouverture fichier
- ForumProblème ouverture fichier chm
- ForumProblème ouverture fichier photo
- ForumPdf problème ouverture fichier
- ForumProblème ouverture fichier html
- ForumProblème ouverture fichier pps
- ForumC est quoi un fichier image
- Voir plus