Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1399 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [ C ] Help, i'm gonna kill myself.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ C ] Help, i'm gonna kill myself.

n°161860
paranoidan​droid
Posté le 18-06-2002 à 15:45:26  profilanswer
 

Mais comment que c'est casse couille les pointeurs .. franchement je comprends que dalle, je reste une éternité sur une pauvre portion de code. Je les utilise et je sais  m^^eme pas ce que ça représente ...
 
Comment peut t on savoir où se trouve un erreur de type mémoire .. Quand je débugue, j'ai un truc du genre , User BReakpoint called from code at 0x77f etc ... ça représente quoi par rapport a mon code ???
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define RESULT_FILE "result.txt"
  5. #define LINERETURN  "\n"
  6. #define SIZETAB  2000
  7. #define MAXCHAR  100
  8. #define BATFILE  "greptab.bat"
  9. #define CPY_TO_FILE " >> "
  10. char *tables[SIZETAB];
  11. char input_f[100];
  12. char path[100];
  13. char *bat;
  14. /* declaration des fonctions */
  15. void launch_bat();
  16. void help(void);
  17. void writefile(char *mot);
  18. char *insert(char *table);
  19. int del_fichier_res(char *fileres);
  20. int del_bat_file(void);
  21. void fAnalyse(char *fileres);
  22. /*Fonction qui scanne le fichier contenant la liste des chaines a rechercher dans les sources*/
  23. void fRun(char *fichier)
  24. {
  25. FILE *fic;
  26. FILE *sortie;
  27. char temp[32];
  28. char *cmd;
  29. char *retour;
  30. char *fileres;
  31. int j;
  32. int i=0;
  33. char *tables_res;
  34. char *info;
  35. //formation de la chaine pour le chemin du fichier resultat
  36. fileres = malloc((strlen(RESULT_FILE)+strlen(path))*sizeof(c
  37. har));
  38. sprintf(fileres,"%s%s",path,RESULT_FILE);
  39. retour=malloc(strlen(CPY_TO_FILE)*sizeof(char));
  40. strcpy(retour,CPY_TO_FILE);
  41. info=malloc(strlen("echo " )*sizeof(char));
  42. strcpy(info,"echo " );
  43. fic = fopen(fichier,"r" );
  44.  if(fic != NULL)
  45. {
  46. // system("md result" );
  47.  do
  48.  {
  49.   fscanf(fic, "%s", temp);
  50.   tables[i]=malloc(strlen(temp)*sizeof(char));
  51.   strcpy(tables[i],temp);
  52.   i++;
  53.  }
  54.  while(!feof(fic));
  55.     //Pour se situer reelement a la derniere ligne
  56.  i--;
  57.  fclose(fic);
  58.  bat = malloc((strlen(path)+strlen(BATFILE))*sizeof(char)
  59. );
  60.  sprintf(bat,"%s%s",path,BATFILE);
  61.  printf("effacement du fichier bat %s\n",bat);
  62.  if(del_bat_file()==0)
  63.  {
  64.   printf("le fichier bat %s a ete efface\n",bat);
  65.  }
  66.  else
  67.  {
  68.   printf("pas de fichier bat %s trouve\n",bat);
  69.  }
  70.  printf("effacement du fichier resultat %s\n",fileres);
  71.  if(del_fichier_res(fileres)==0) printf("le fichier resultat %s a ete efface\n",fileres);
  72.   else printf("pas de fichier resultat %s trouve\n",fileres);
  73.  sortie = fopen(bat,"a" );
  74.  if(sortie != NULL)
  75.  {
  76.   for(j=0;j<i;j++)
  77.   {
  78.    cmd = malloc(strlen(tables[j])*sizeof(char));
  79.    strcpy(cmd,insert(tables[j]));
  80.    tables_res = malloc((strlen(info)+strlen(tables[j])+strlen(file
  81. res)+strlen(retour)+strlen(LINERETURN))*sizeof(cha
  82. r));
  83.    sprintf(tables_res,"%s%s%s%s%s",info,tables[
  84. j],retour,fileres,LINERETURN);
  85.    fputs(tables_res, sortie);
  86.    fputs(cmd, sortie);
  87.   }
  88.   fclose(sortie);
  89.  }
  90.  launch_bat(bat);
  91. //  fAnalyse(fileres,i);
  92. }
  93. else printf("le fichier %s n'a pas pu etre ouvert\n\n",input_f);
  94. }
  95. int del_bat_file(void)
  96. {
  97. char *command;
  98. char delcom[5];
  99. strcpy(delcom,"del " );
  100. command = malloc((strlen(delcom)+strlen(bat))*sizeof(char));
  101. sprintf(command,"%s%s",delcom,bat);
  102. if (system(command) == 0)
  103. {
  104.  return(0);
  105. }
  106. else
  107. {
  108.  return(-1);
  109. }
  110. }
  111. void launch_bat(void)
  112. {
  113. FILE *batfile;
  114. batfile = fopen(bat,"r" );
  115. if (batfile == NULL)
  116. {
  117.  printf ("le fichier %s contenant les commandes à executer n'a pas pu être trouvé\n",BATFILE);
  118. }
  119. else
  120. {
  121.  system(bat);
  122. }
  123. }
  124. char *insert(char *table)
  125. {
  126. char *cmdd;
  127. char *cmdf;
  128. char *cmd;
  129. char *separateur = "/";
  130. char *lResultFileName;
  131. char *searchdir;
  132. char *filename;
  133. lResultFileName = malloc(strlen(RESULT_FILE)*sizeof(char));
  134. strcpy(lResultFileName,RESULT_FILE);
  135. filename = malloc((strlen(path)+strlen(lResultFileName))*size
  136. of(char));
  137. sprintf(filename,"%s%s",path,lResultFileName);
  138. cmdd=malloc(strlen("grep -i -c -d " )*sizeof(char));
  139. cmdf=malloc(strlen(" >> " )*sizeof(char));
  140. strcpy(cmdd,"grep -i -c -d " );
  141. strcpy(cmdf," >> " );
  142. searchdir = malloc((strlen(path)+strlen("*.*" ))*sizeof(char));
  143. sprintf(searchdir,"%s%s%s"," ",path,"*.*" );
  144. cmd = malloc((strlen(cmdd)+strlen(table)+strlen(searchdi
  145. r)+strlen(cmdf)+strlen(filename)+strlen(LINERETURN
  146. ))*sizeof(char));
  147.    sprintf(cmd,"%s%s%s%s%s%s",cmdd,table,searchdir
  148. ,cmdf,filename,LINERETURN);
  149. // free(lResultFileName);
  150. // free(filename);
  151. // free(searchdir);
  152.    return(cmd);
  153. }
  154. int del_fichier_res(char *fileres)
  155. {
  156. char *command;
  157. char delcom[6];
  158. strcpy(delcom,"del " );
  159. command = malloc((strlen(delcom)+strlen(path))*sizeof(char))
  160. ;
  161. sprintf(command,"%s%s",delcom,fileres);
  162. if (system(command) == 0) return(0);
  163.  else return(-1);
  164. }
  165. void main(int argc, char *argv[])
  166. {
  167. argc = 3;
  168. argv[1]="C:\\wrkcesar\\database\\list.txt
  169. ";
  170. argv[2]="C:\\wrkcesar\\database\\";
  171. if (argc != 3) help();
  172. else
  173. {
  174.   strcpy(input_f,argv[1]);
  175.   strcpy(path,argv[2]);
  176.   fRun(argv[1]);
  177. }
  178. }
  179. void help(void)
  180. {
  181. printf("Correct syntax is :\n\tgreper <list.file> <search.path>" );
  182. exit(0);
  183. }


 
 
C'est surement très laid, c'est premier exe en C.
 
Est ce que vous pourriez juste me taper deux trois chtites remarques comme les erreurs a pas faire, les trucs que j'ai fais etc ..
 
Ce code est censé greper des mots ( qui sont contenues dans un fichier ) dans un répertoire et ses sous repertoires .. et de mettre le résultat dans un fichier resultat.txt
 
D'abord je tente de lire ma liste de mots pour construire un .bat qui éxécuté va remplir mon fichier resultat.txt
 
Je m'en sors pas du tout ..
 
Merci


Message édité par paranoidandroid le 18-06-2002 à 15:59:40
mood
Publicité
Posté le 18-06-2002 à 15:45:26  profilanswer
 

n°161923
El_gringo
Posté le 18-06-2002 à 16:23:32  profilanswer
 

c surement un débordement mémoire.
quand tu fais un *scanf (ici, un fscanf), pour tes arguments (les derniers paramètres), tu doit mettre l'adresse, pas l'argument lui-même, donc tu vas plutot mettre :

Code :
  1. fscanf(fic, "%s", &temp);


ensuite, vas voir sur l'autre topic pour la lecture de fichier :
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
 
Essaye déja ça avant de te tuer !  :hello:


Message édité par El_gringo le 18-06-2002 à 16:24:13
n°161932
El_gringo
Posté le 18-06-2002 à 16:28:36  profilanswer
 

et puis, dans ton main, ça va pas du tout:

Code :
  1. void main(int argc, char *argv[])
  2.   {
  3.      argc = 3;
  4.      argv[1]="C:\\wrkcesar\\database\\list.txt
  5.     ";
  6.      argv[2]="C:\\wrkcesar\\database\\";
  7.    
  8.      if (argc != 3) help();
  9.        else
  10.      {
  11.          strcpy(input_f,argv[1]);
  12.          strcpy(path,argv[2]);
  13.          fRun(argv[1]);
  14.      }
  15.   }


 
T'utilises int argc et char *argv[] en écriture, j'aurais même pas pensé que ça pourrait compiler.
ces trucs, c fait pour récupérer les arguments que t'as passé à ton exe en ligne de comande. T'as pas à aller bricoler dedant. Pourquoi tu mets des valeurs dedant !? j'comprend pas ? c quoi ces : "C:\\wrkcesar\\database\\list.txt" et "C:\\wrkcesar\\database\\" ?

n°161946
LetoII
Le dormeur doit se réveiller
Posté le 18-06-2002 à 16:35:56  profilanswer
 

el_gringo a écrit a écrit :

c surement un débordement mémoire.
quand tu fais un *scanf (ici, un fscanf), pour tes arguments (les derniers paramètres), tu doit mettre l'adresse, pas l'argument lui-même, donc tu vas plutot mettre :

Code :
  1. fscanf(fic, "%s", &temp);


ensuite, vas voir sur l'autre topic pour la lecture de fichier :
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
 
Essaye déja ça avant de te tuer !  :hello:  




 
Non c pas nécessaire, temp est déjà un pointeur vers une zone mémoire, par contre elle est peut être pas assez grande.


---------------
Le Tyran
n°161955
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-06-2002 à 16:39:17  profilanswer
 

paranoidandroid a écrit a écrit :

 

Code :
  1. void main(int argc, char *argv[])
  2. {
  3. argc = 3;
  4. argv[1]="C:\\wrkcesar\\database\\list.t
  5. xt
  6. ";
  7. argv[2]="C:\\wrkcesar\\database\\";
  8. if (argc != 3) help();
  9. else
  10. {
  11.   strcpy(input_f,argv[1]);
  12.   strcpy(path,argv[2]);
  13.   fRun(argv[1]);
  14. }
  15. }
  16. void help(void)
  17. {
  18. printf("Correct syntax is :\n\tgreper <list.file> <search.path>" );
  19. exit(0);
  20. }





 :ouch:  
tu nous fais quoi la ??
argc et argv sont utilisés pour récupérer les paramètres passés en ligne de commande, t'as pas à y accéder en écriture !!!


---------------
J'ai un string dans l'array (Paris Hilton)
n°161960
paranoidan​droid
Posté le 18-06-2002 à 16:44:02  profilanswer
 

el_gringo a écrit a écrit :

et puis, dans ton main, ça va pas du tout:

Code :
  1. void main(int argc, char *argv[])
  2.   {
  3.      argc = 3;
  4.      argv[1]="C:\\wrkcesar\\database\\list.txt
  5.     ";
  6.      argv[2]="C:\\wrkcesar\\database\\";
  7.    
  8.      if (argc != 3) help();
  9.        else
  10.      {
  11.          strcpy(input_f,argv[1]);
  12.          strcpy(path,argv[2]);
  13.          fRun(argv[1]);
  14.      }
  15.   }


 
T'utilises int argc et char *argv[] en écriture, j'aurais même pas pensé que ça pourrait compiler.
ces trucs, c fait pour récupérer les arguments que t'as passé à ton exe en ligne de comande. T'as pas à aller bricoler dedant. Pourquoi tu mets des valeurs dedant !? j'comprend pas ? c quoi ces : "C:\\wrkcesar\\database\\list.txt" et "C:\\wrkcesar\\database\\" ?  




 
Je bidouille dedans pour l'executer en mode débug ...
 
Avec VC++6 si je fais fais F5 je m'arrête des la fin du main ... Alors c'est pour le forcer a =entrer dans le read .. en quelque sorte ..

n°161969
El_gringo
Posté le 18-06-2002 à 16:51:51  profilanswer
 

Bah, avec VC++, tu vas dans les Setting de ton projet, onglet debug, le 3e champ de texte en partant du haut : "program arguments"
ici, tu mets C:\\wrkcesar\\database\\list.txt C:\\wrkcesar\\database\\
ça sera plus simple et vachement moins vilain !

n°161972
zi_ril_wan​ou
Posté le 18-06-2002 à 16:53:23  profilanswer
 

paranoidandroid a écrit a écrit :

 
 
Je bidouille dedans pour l'executer en mode débug ...
 
Avec VC++6 si je fais fais F5 je m'arrête des la fin du main ... Alors c'est pour le forcer a =entrer dans le read .. en quelque sorte ..  




Voui mais non !  ;)  
Déjà tu ne peux pas faire  

Code :
  1. mon_pointeur_de_caractère = "toto" ;


en C.  
Mais  

Code :
  1. strcpy(mon_pointeur_de_caractère,"toto" ) ;


 
Et encore, ce n'est pas suffisant : il faut que mon_pointeur_de_caractère définissent une zone mémoire libre de taille supérieure ou égale à ceux que tu veux y faire rentrer dedans.
argc et argv étant des variables réservées, je ne m'y risquerai même pas.


---------------
Get the Cooool... Get the cool shoe-shine !
n°161982
MrTonio
Posté le 18-06-2002 à 17:02:21  profilanswer
 

C est pas joli, joli  :heink:  :eek2:  
 
Mais le probleme principal c est que tout oubli la place pour le '\0' lorsque tu fais des malloc de chaine de caractère


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
n°162002
paranoidan​droid
Posté le 18-06-2002 à 17:45:21  profilanswer
 

MrTonio a écrit a écrit :

C est pas joli, joli  :heink:  :eek2:  
 
Mais le probleme principal c est que tout oubli la place pour le '\0' lorsque tu fais des malloc de chaine de caractère  




 
Je sais que c'est pas beau ...
Je m'y recolle ce soir, que du c

mood
Publicité
Posté le 18-06-2002 à 17:45:21  profilanswer
 

n°162003
paranoidan​droid
Posté le 18-06-2002 à 17:45:44  profilanswer
 

el_gringo a écrit a écrit :

Bah, avec VC++, tu vas dans les Setting de ton projet, onglet debug, le 3e champ de texte en partant du haut : "program arguments"
ici, tu mets C:\\wrkcesar\\database\\list.txt C:\\wrkcesar\\database\\
ça sera plus simple et vachement moins vilain !  




Merci pour cette précision ...

n°162071
paranoidan​droid
Posté le 18-06-2002 à 20:57:22  profilanswer
 

Y'a  pas une taille maximale lorsque on lit une ligne dans un fichier ... genre 256 je sais plus

n°162089
paranoidan​droid
Posté le 18-06-2002 à 21:11:20  profilanswer
 

Loaded 'C:\WINNT\System32\ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINNT\system32\KERNEL32.DLL', no matching symbolic information found.
The thread 0x5C0 has exited with code 57 (0x39).
The program 'E:\BTS\pti\greper\Debug\grep.exe' has exited with code 57 (0x39).
 
:D j'ai tout compris ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [ C ] Help, i'm gonna kill myself.

 

Sujets relatifs
forum pour un site perso ( je me suis trompé en le faisant) help :)[java] need help
Pb avec ACCESS et VB .. need help , please ...Jar ? Unjar ? Need Help pliz !!!!!
[PHP] - gethostbyaddr (help)...please, help me...
Signification sur != includes ... need help :)[VC++] CStatusBar HELP!!
[C++] Comment commencer ? (Vite c pour mon mariage, Help :))[Beta Test + Help] Site de loterie
Plus de sujets relatifs à : [ C ] Help, i'm gonna kill myself.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR