Yannikator
Messages postés23Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention10 novembre 2012
-
29 janv. 2009 à 23:39
Yannikator
Messages postés23Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention10 novembre 2012
-
6 févr. 2009 à 22:39
Bonjour,
Je développe un petit programme en C et je me heurte à un problème que je pense pas incontournable mais j'ai pas d'idée là... J'ai fait un fonction getPath qui permet à l'utilisateur d'entrer le chemin du fichier qu'il veut ouvrir.
Cette fonction me retourne un string:
externe char *pathFile;
void function()
{
pathFile=getPath(1);
fopen(pathFile,"+r");//et c'est ici qu'il y a un problème
...
}
En effet lors de la compilation j'ai aucune erreur, mais quand j'execute le programme celui-ci me retourne une erreur: "stream!=NULL" et bug!
Pourtant j'ai vérifé et pathFile contien bien le chemin du fichier. Voici son code:
char *getPath(int mode)
{
char buffer[100],*path;
int i;
/*Le variable mode, permet de déterminer dans quel cas on se trouve. càd si on ve récupérer le path
d'un fichier ou l'emplacement dans lequel on veut l'enregistrer.*/
switch(mode){
case 1:
printf("Entrez le chemin ou se trouve votre fichier a crypter:\n (ex : C:/mon_dossier/mon_fichier.txt)");
fgets(buffer,sizeof(buffer),stdin);
break;
case 2:
printf("Entrez le chemin ou vous desirez enregistrer votre fichier crypté:\n (ex : C:/mon_dossierPerso/mon_fichier_a_garder.txt)");
fgets(buffer,sizeof(buffer),stdin);
break;
default:
printf("erreur dans l'utilisation de la fonction");
break;
}
printf("buffer: %s",buffer);
system("PAUSE");
path = (char *) malloc(sizeof(char)*strlen(buffer)+1);
if(!path)
exit(1);
for (i=0;i<((int)strlen(buffer)+1);i++){
path[i]=buffer[i];
}
return path;
}
Quelqu'un pourrait il m'aider à résoudre ce problème?
N'hésitez pas à poser des question si je ne suis pas assez clair...
Merci.
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 2 févr. 2009 à 11:33
Pffiou...Hé bé! J'ai lutté pour trouver le problème...
En fait, c'est tout bête
Quand tu fais un fgets(), ta chaine contient le caractère "entrée" que tu tapes pour valider, il faut donc l'enlever:
char *getPath(int mode)
{
char buffer[100],*path;
int i;
/*Le variable mode, permet de déterminer dans quel cas on se trouve. càd si on ve récupérer le path
d'un fichier ou l'emplacement dans lequel on veut l'enregistrer.*/
switch(mode){
case 1:
printf("Entrez le chemin ou se trouve votre fichier a crypter:\n (ex : C:/mon_dossier/mon_fichier.txt)");
fgets(buffer,sizeof(buffer),stdin);
break;
case 2:
printf("Entrez le chemin ou vous desirez enregistrer votre fichier crypté:\n (ex : C:/mon_dossierPerso/mon_fichier_a_garder.txt)");
fgets(buffer,sizeof(buffer),stdin);
break;
default:
printf("erreur dans l'utilisation de la fonction");
break;
}
printf("buffer: %s",buffer);
//system("PAUSE");
for (i=0;i<(int)strlen(buffer)-1;i++)
{
path[i]=buffer[i];
}
path[i]=0;
return path;
}
NB: Attention, toutefois à la libération de la mémoire allouée. Généralement, on alloue le pointeur dans la fonction appelante et on le supprime quand on en a plus besoin...
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 30 janv. 2009 à 13:48
Pas cool... Tu as quoi exactement dans pathFile?
Si tu le fais en debug, file est-il vide ou pas? Est-ce que t'es anti-slashs sont bien doublés?
Tiens, en passant, généralement on met "r+"
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Yannikator
Messages postés23Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention10 novembre 2012 1 févr. 2009 à 15:53
Et bien en fait, je peux pas savoir, puisqu'il n'arrive pas à l'ouvrir. C'est d'ailleurs ça le problème. Il ne sort pas de fopen().
J'ai essayé deux façons pour le chemin: C:/test.txt et C:\\test.txt. Les deux fonctionnent normalement sous windows. Sinon j'ai bien mis "r+" c'était une faute de frappe, mais bonne observation car j'avais peut-être mis +r par inadvertence, mais même corrigé ça ne fonctionne toujours pas.
Dis moi comment toi tu ferais par exemple, peut-être que ça m'éguillerais.
Merci pour ton attention buno.
@+
Yannikator
Messages postés23Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention10 novembre 2012 4 févr. 2009 à 11:24
C'est une possibilité à laquelle j'ai pas pensé en effet... Je vais tester d'enlever fgets,car effectivement le printf() n'affiche pas \n ou \r.
Je vais donc editer ma fonction, et je te tiens au courant (avec un peu de retard peut-être car j'ai plus le net en ce moment)
Merci d'avoir prit le temps de m'aider.
A bientôt.
Yannikator
Messages postés23Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention10 novembre 2012 6 févr. 2009 à 22:39
Bon, du coup j'ai pas enlevé mon fgets, mais j'ai fait un algo qui me supprime le caractère entré avant de le retourner. Maintenant ça marche du tonnerre de dieu hihi. Merci encore buno super ton idée ;)
See you later!!
Enjoy!