Besoin d'aide programme en C

Bonsoir

j'aurai beson d'aide pour débboguer un programme en C, langage que je ne maitrise pas mais que je suis obligé d'utiliser.

le but du prog est dispo ici : http://jfjava2002.free.fr/tp5.html

le compilateur (gcc sous linux) me renvoi une erreur : référencement indéfinie pour la fonction crypt().
le code :

#include <stdio.h>
#include <string.h>
#include <unistd.h>

// le prototype de main est

int main(int argc, char *argv[])

// lorsqu'on ne veut pas utiliser les arguments de la ligne de commande : int main(void)


{
  char ch[255], _salt[100]; //définition de la chaine
  char * clef;
  char chcrypt;

    char a,b,c,d,e,f,g,h; //definition des variables

    a=b=c=d=e=f=g=h=97; //initialisation des variables
    for (a=97;a<=98;a++) //pour 1 tour de boucle sinon mettre 105 au lieu de 98
    {
        for (b=97; b<=122;b++)
       {
	 for (c=97;c<=122;c++)
	   {
	     for (d=97; d<=122;d++)
	       {
		 for (e=97; e<=122; e++)
		   {
		     for (f=97; f<=122; f++)
		       {
			 for (g=97; g<=122; g++)
			   {
			     for (h=97; h<=122; h++)
			       {
			
           ch[0] = a;
           ch[1] = b;
	   ch[2] = c;
	   ch[3] = d;
	   ch[4] = e;
	   ch[5] = f;
	   ch[6] = g;
	   ch[7] = h;
           ch[8] = 0;
	  //puts(ch); permet l'affichage de la chaine
	   chcrypt = crypt(ch,argv[2]);
	     if (strcmp(ch,argv[1])==0)
	       {
		 printf("le mot de passe pour %s est %s",argv[1],ch);   
	       }
			       }
			   }
		       }
		   }
	       }
	   }
       }

    }

   
   // la fonction main doit retourner un entier !
   //return 0;
}


Merci d'avance pour votre aide

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,

    Généralement " implicit déclaration of function 'crypt' " signifie que le compilo n'a pas trouvé le prototypage avant l'utilisation de la fonction.
    Vérifies qu'il est bien dans unistd.h sous la forme extern char *crypt(const char *, const char *);

    sinon le pb peut venir du faite que les parametres ne soient pas du meme type que le prototypage utilisé => cast des paramètres et ajout de prototypage devrait résoudre ton pb.

    +A
    1. Fais un 'man crypt' sur ton système Linux, il t'indiquera quelles sont les
      lignes (include et define ) à mettre en tête de ton source afin d'éviter ce
      warning.
      1. ben le problème est qu'il me metimplicit déclaration of function 'crypt'...
        1. Salut
          Tu utilises bien la ligne de compilation suivante :
          gcc -Wall -lcrypt -o mon_crack mon_crack.c

          Je pars du principe que ton source est dans le fichier mon_crack.c
          J'ai le même message d'erreur en ne mettant pas -lcrypt dans lors de la compil.
          A+, crabs