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

  FORUM HardWare.fr
  Programmation
  C

  Problème au niveau d'une chaîne de caractères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème au niveau d'une chaîne de caractères

n°1719575
bouldouman
Posté le 18-04-2008 à 02:40:32  profilanswer
 

Bonsoir à tous  :hello:

 

Je suis en première année d'école d'ingénieur, et je dois réaliser un programme qui teste une page html, et qui en tire les liens morts.

 

J'ai donc créé une première procédure qui teste un lien et qui dit s'il est bon ou pas :

 
Code :
  1. void lienbon(char **argv) {
  2.   char commande[100];
  3.   int coderetour=0;
  4.   sprintf(commande, "wget -q %s", argv[1]);
  5.   if(system(commande)==0) {
  6.     printf("le lien est bon\n" );
  7.   }
  8.   else {
  9.     printf("le lien est mort\n" );
  10.     coderetour=1; }
  11. }
 

J'ai déjà super galéré pour faire ça...

 

Ensuite j'ai créé une procédure qui scanne une page HTML pour en retirer tous les liens écrits de façon propre :

 
Code :
  1. void testpage ( FILE *fH ) {
  2.   Booleen encore = VRAI;
  3.   char c;
  4.   char *d;
  5.   char chaine[100]="\0";
  6.   while ( encore ) {
  7.     c = fgetc ( fH );
  8.     while ( c != EOF && c != '<' ) {
  9.       c = fgetc ( fH );
  10.     }
  11.     switch (c) {
  12.     case EOF : encore = FAUX;
  13.       break;
  14.     case '<' : if((c=fgetc(fH))=='a'){
  15.         while(c!='"'){
  16.           c=fgetc(fH);
  17.         }
  18.         c=fgetc(fH);
  19.       while(c!='"'){                       // boucle qui prend en compte le lien bien tapé
  20.         c=*d;                              // pour convertir un char en char * ??? Ca m'a l'air foireux, mais pourtant ça fait fonctionner strcat
  21.         strcat(chaine, d);
  22.         c=fgetc(fH);
  23.       }
  24.       printf("%s\n", chaine);           // affiche la chaine de caractère, pour vérifier qu'elle est bonne : ne fonctionne pas
  25.       //lienbon(chaine);                 // pour le moment, seulement en commentaire, parce que même le printf précédent ne marche pas...
  26.       printf("\n" );                         // simplement pour améliorer la mise en page
  27.       }
  28.       else encore=VRAI;
  29.     }
  30.   }
  31. }
 


Alors voilà mon premier problème : j'arrive à compiler le programme, mais quand je l'exécute, il me sort une bouillie de caractère, approximativement de la longueur de chaque lien cependant...

 

Donc il y a un soucis au niveau de la chaîne de caractère créée...

 

Je me dis que cela doit venir du fait que la fonction fgetc renvoie un entier, alors que "c" est un caractère à la base...

 

Je pense que la clé du soucis se trouve dans le fait que je doive convertir un char (ou un int ??? je ne sais plus) en char*. Mais malgré mes recherches, je n'y arrive pas.

 

Et là j'ai passé des heures là-dessus, je n'en peux plus, je suis vraiment à bout.  :sweat:  Une aide me ferait tellement du bien !  :jap:  :jap:


Message édité par bouldouman le 18-04-2008 à 02:42:50
mood
Publicité
Posté le 18-04-2008 à 02:40:32  profilanswer
 

n°1719615
olivthill
Posté le 18-04-2008 à 09:02:08  profilanswer
 

Oui, strcat a besoin de deux chaines de caractères, c'est à dire de deux buffers terminés par un zéro.
Le problème est que c=*d;  ne va pas mettre un zéro à la fin.
Il faudrait faire ceci :

char d[2];
d[0] = c;
d[1] ='\0';


Message édité par olivthill le 18-04-2008 à 09:02:22
n°1719686
bouldouman
Posté le 18-04-2008 à 10:33:33  profilanswer
 

Merci de ta réponse ! Effectivement je n'avais pas vu ce problème...
 
Mais là en fait je viens de demander de l'aide à un ami, et ça marche ! voici la version définitive (sans strcat en fait) :
 

Code :
  1. void testpage ( FILE *fH ) {
  2.   Booleen encore = VRAI;
  3.   char c;
  4.   int i=0;
  5.   char chaine[100]="\0";
  6.   while ( encore ) {
  7.     c = fgetc ( fH );
  8.     while ( c != EOF && c != '<' ) {
  9.       c = fgetc ( fH );
  10.     }
  11.     switch (c) {
  12.     case EOF : encore = FAUX;
  13.       break;
  14.     case '<' : if((c=fgetc(fH))=='a'){
  15. while(c!='"'){
  16.   c=fgetc(fH);
  17. }
  18. c=fgetc(fH);
  19. while(c!='"'){
  20.   chaine[i]=c;
  21.   i++;
  22.   c=fgetc(fH);
  23. }
  24. lienbon(chaine);
  25. printf("\n" );
  26. memset (chaine, 0, sizeof (chaine));     
  27. i=0;
  28.       }
  29.       else encore=VRAI;
  30.     }
  31.   }
  32. }


 
 
Et pour la procédure lienbon :
 

Code :
  1. void lienbon(char *argv) {
  2.   char commande[100];
  3.   int coderetour=0;
  4.   sprintf(commande, "wget -q %s", argv);
  5.   if(system(commande)==0) {
  6.     printf("le lien %s est bon\n", argv);
  7.   }
  8.   else {
  9.     printf("le lien %s est mort\n", argv);
  10.     coderetour=1; }
  11. }


 
 
Merci quand même ! A bientôt.
 


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

  Problème au niveau d'une chaîne de caractères

 

Sujets relatifs
les chaines de caracteres en assembleurliste modifiable probleme
[Résolu] Problème de récupérationProblème " recherche dans mes tables "
problème d'affichage du format de la date (AAAA-MM-JJ)Caracteres non désiré
problème avec javaMail[PHP/SQL]: Problème: Envoie de formulaire PHP vers Mysql
[PERL] probleme avec foreach et l'ascii 10envoi mail problème
Plus de sujets relatifs à : Problème au niveau d'une chaîne de caractères


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