View Full Version : probleme de compil dans une fonction en c
celineee
23 avril 2004, 11h05
j'utilise une fonction pour recuperer un resume dans un fichier selon un numero de film et j'ai des erreurs mais je ne vois pas ou si quelqu'un pouvait m'aider merci d'avance
a priori ca viendrait de mon strcmp mais je vois pas ou il y a une erreur
char* foncrecupres(liste* l,char* Fic,int* NumeroFilm)
{
FILE *FichRes;
Resume *Res;
char *NomFic;
char *resume;
NomFic = (char*)malloc((strlen(Fic)+8)*sizeof(char));
strcpy(NomFic,Fic);
strcat(NomFic,"res.txt");
FichRes=fopen(NomFic,"r");
OuvrirListe(l);
Res=l->Premier;
while (strcmp(Res->NumFilm,NumeroFilm))
{
Res = Res->Suivant;
}
resume=(char*)malloc(sizeof(strlen(Res->TailleRes));
resume=Res->resume;
fclose(FichRes);
return(resume);
}
Y a pas à dire, le cpp c'est imbouffable :D
1for-matik
23 avril 2004, 11h15
Y a pas à dire, le cpp c'est imbouffable :D
Vive le C++ c'est tout ce que j'ai à dire! :D :p
celineee
23 avril 2004, 11h17
Mais encore ?
tu veux pas plutot m'aider a regarder ce qui ne va pas :mad:
en relisant mon post j'ai trouve que ca manquait de commentaire, donc je vais expliquer un peu mieux
pour recuperer mon resume j'ouvre le fichier totores.txt
ensuite grace au numero de film que j'ai recuperer a l'aide d'une autre fonction
je parcours mon fichier resume jusqu'a trouver le bon numero de film et la je chopper mon resume.
la structure de mon resume se compose ainsi
NumFilm ->identifiant du film
TailleRes->taille en caractere de mon resume
resume->mon fameux resume
merci pour ceux qui vont m'aider
Benjy
23 avril 2004, 11h34
Peut-on avoir le listing de la fonction OuvrirListe(), qui à mon avis est la cause réelle de ton problème ?
celineee
23 avril 2004, 12h13
je crois avoir trouve, en faite NumeroFilm et Res->NumFilm sont des int donc forcemment je dois pas utiliser un stcmp!!!!
ma fonction ouvrirliste me met juste au ma premiere structure presente dans ma liste, et elle marche très bien car je l'utilise une dizaine de fois au moins dans mon prog sans qu'elle ne m'ai posé de probleme
celineee
23 avril 2004, 12h18
bah maintenant j'ai un autre probleme il me dit que dans mon if je compare un pointeur avec un int et que ce n'est pas possible... meme en passant par une variable test pourtant dans ma structure Resume ,NumFilm est bien un int...je comprend plus rien...:(
char* foncrecupres(liste* l,char* Fic,int* NumeroFilm)
{
FILE *FichRes;
Resume *Res;
char *NomFic;
char *resume;
int test;
NomFic = (char*)malloc((strlen(Fic)+8)*sizeof(char));
strcpy(NomFic,Fic);
strcat(NomFic,"res.txt");
FichRes=fopen(NomFic,"r");
OuvrirListe(l);
Res=l->Premier;
while (Res!=NULL)
{
Res = Res->Suivant;
test=Res->NumFilm;
if (test==NumeroFilm);
{
resume=(char*)malloc(sizeof(strlen(Res->TailleRes));
resume=Res->resume;
return (resume);
}
}
fclose(FichRes);
return NULL;
}
celineee
23 avril 2004, 12h30
c'est bon j'ai trouve d'ou venait l'erreur merci a tous ceux qui ont essaye d em'aider
l'erreur se trouver dans char* foncrecupres(liste* l,char* Fic,int* NumeroFilm)
j'ai mis un int* au lieu d'un int tout simple :D
Bah oui, tout de suite c'est plus cohérent :D
... j'adore cpp, vraiment ...
1for-matik
23 avril 2004, 12h52
Bah oui, tout de suite c'est plus cohérent :D
... j'adore cpp, vraiment ...
On est deux!
J'adore ton humour Fred :p
Samva
24 avril 2004, 18h13
Mais c'est un langage tout a fait correct le CPP, Barjne a fait les choses correctement....
Python Powered Samva :)
celineee
24 avril 2004, 21h48
alors la nouveau probleme j'utilise un rename et un remove quand je compile sur windows ca marche aps il ne me fait pas le rename et le remove, si je compile sur linux ca me le fait correctemment alors la je ne comprend pas du tout
Samva
24 avril 2004, 22h23
T'utilise un rename et un remove... explicite la :) cherche au niveau des chemin du compilateur et des inclusions par défaut peut etre....
Matt > ca me rappelle une soirée de compilation d'asm :) :D
celineee
24 avril 2004, 23h42
void foncmodifres(char* res,char* Fic,int taille,int NumeroFilm)
{
FILE *FichResSource;
FILE *FichResDest;
char *NomFicSource;
//char test[40];
char *NomFicDest;
char *resume;
int temp;
NomFicSource = (char*)malloc((strlen(Fic)+8)*sizeof(char));
NomFicDest = (char*)malloc((strlen(Fic)+8)*sizeof(char));
strcpy(NomFicSource,Fic);
strcpy(NomFicDest,Fic);
strcat(NomFicSource,"res.txt");
strcat(NomFicDest,"res.tmp");
FichResSource=fopen(NomFicSource,"r+");
FichResDest=fopen(NomFicDest,"w");
while( fscanf(FichResSource,"%d ",&temp)!=EOF)
{
fprintf(FichResDest,"%d ",temp);
if (temp==NumeroFilm)
{
fscanf(FichResSource,"%d ",&temp);
resume = (char*)malloc(sizeof(char)*(temp+1));
fprintf(FichResDest,"%d ",taille);
fread(resume, sizeof(char), (temp+1), FichResSource);
fwrite(res, sizeof(char), (taille), FichResDest);
}
else
{
fscanf(FichResSource,"%d ",&temp);
fprintf(FichResDest,"%d ",temp);
resume = (char*)malloc(sizeof(char)*(temp+1));
fread(resume, sizeof(char), (temp+1), FichResSource);
fwrite(resume, sizeof(char), (temp+1), FichResDest);
}
}
fclose(FichResSource);
remove(NomFicSource);
fclose(FichResDest);
rename(NomFicDest,NomFicSource);
}
Voila le programme alors je vous explique un peu, le but est de recopier dans le fichier destination toutes les informations du fichier source sauf une donnée, le résumé modifier pour cela je le fait grace au numFilm que je recupere avant vu que chaque resume a un numfilm bien distinct.
le programme marche nickel sur linux, de plus le chemin est bon vu que si je fait un remove("text.txt"); et que le fichier text.txt est au meme endroit que le fichier qui a la valeur contenu dans NomFicSource bah le remove se fait bien.
Je me demande aps si c parceque le fichier est utilise et que win ne veux pas me le supprimer et le rename, mais comme je fais bien un fclose avant je ne comprend pas pourquoi ca ne marche pas...
la je desespere un peu....:confused:
Samva
25 avril 2004, 12h18
recupere l'erreur retournée par la fonction remove via errno...
extern int errno;
et apres tu fais un truc du genre
remove(NomFicSource);
if (errno==EACCESS) printf("impossible d'acceder...");
if (errno==ENOENT) printf("Fichier introuvable blablabla");
Deja ca peut t'apporter un debug... :)
$c@r
2 juillet 2004, 12h55
Bah oui, tout de suite c'est plus cohérent :D
... j'adore cpp, vraiment ...
C'est du langage c tout court les gars, pas du c++. ;)
Samva
2 juillet 2004, 22h08
Les différences entre C et C++ sont pas énormes.... vu l'implémentation objet....
Delphi for .net rox :)
$c@r
3 juillet 2004, 12h22
Le c++ est quand même (beaucoup) plus orienté objet ! Et essai de compiler un projet c++ avec un compilateur C (même si il en existe plus beaucoup) tu risque d'avoir des erreur. ;) D'où mon intervention : le C et le C++ sont très différent !
Voila ca sert à rien, je sais mais c'est tous ce que j'avais à dire :D
Samva
3 juillet 2004, 21h43
$c@r... tu me fais rire, le C++ est un langage orienté objet, le C non, voilà la différence énorme, et bien entendu il est impossible de compiler un projet C++ avec un compilateur C, ce ne sont pas les mêmes langages, juste deux langages proches.... Mais compiler un projet C avec un compilateur C++ ne pose pas de probleme, le C n'étant que le penchant procédural du C++ si on veut. Enfin reste que Barjne aurait mieux fait de glisser dans son bain le jour où il a inventé le C+1, mais c'est mon avis... :D
Java et/ou Python sont des langages objets, purs, performants et multiplateforme, voilà des bons langages ...
Matt
3 juillet 2004, 21h55
Java et/ou Python sont des langages objets, purs, performants et multiplateforme, voilà des bons langages ...
>> Java n'est qu'un sous C++ ^^ Comme le disait mon prof d'Algo :
"D'abord, il y a eu le C. Ensuite, on a fait évoluer le C, et on l'a appellé C++ en référence à l'incrémentation. Ensuite, on en a enlevé des morceaux pour le rendre plus strict, et on a appelé ça Java parce que ça sonnait quand même mieux que C++--" ;)
Et Java étant un langage s'exécutant sur une machine virtuelle, il est de niveau bien trop bas et ne pourra donc jamais atteindre le niveau de performances de langages de haut niveau comme le C/C++
Samva
3 juillet 2004, 21h58
Pas trop d'accord sur ce point, Java est autre chose qu'un sous C++, il y a de bonnes choses en Java, comme il y a de bonnes choses en C++ mais j'aime pas le C++ :D alors bon..... Ma préférence du moment va a Python dans tout les cas, un vrai langage purement objet... c'est marrant a utiliser...
vBulletin® v3.7.0, Copyright ©2000-2008, Jelsoft Enterprises Ltd.