Compile pas !!

Nulia -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai un petit probleme avec mon algo ...ilcodage m'affiche plein de fautes
voila le code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void upper_case(char *src)
{
while (*src != '\0') {
if (islower(*src)) *src &= ~0x20;
src++;
}
}

char* encipher( char *src, char *key, int is_encode)
{
int i, klen, slen;
char *dest;

dest = strdup(src);
upper_case(dest);
upper_case(key);

/* strip out non-letters */
for (i = 0, slen = 0; dest[slen] != '\0'; slen++)
if (isupper(dest[slen]))
dest[i++] = dest[slen];

dest[slen = i] = '\0'; /* null pad it, make it safe to use */

klen = strlen(key);
for (i = 0; i < slen; i++) {
if (!isupper(dest[i])) continue;
dest[i] = 'A' + (is_encode
? dest[i] - 'A' + key[i % klen] - 'A'
: dest[i] - key[i % klen] + 26) % 26;
}

return dest;
}

int main()
{
char *str ;
char *cod, *dec;
char key[10] ;
printf(" donner le Text:");
scanf ("%s",&str);
printf(" donner la cle:");
scanf ("%s",&key);
printf("Text: %s\n", str);
printf("key: %s\n", key);

cod = encipher(str, key, 1); printf("Code: %s\n", cod);
dec = encipher(cod, key, 0); printf("Back: %s\n", dec);

/* free(dec); free(cod); */ /* nah */
return 0;
}


1 réponse

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Bonjour Nulia,

    Ce programme compile avec gcc -Wall et produit un exécutable.

    gcc produit cependant 2 warnings (qui sont donc des avertissements, et non pas des erreurs empêchant la compilation, qui, la plupart du temps signalent des comportements à risque voire des erreurs possibles, autres que de syntaxe) :

    nulia.c:47:2: warning: format `%s' expects argument of type `char *', but argument 2 has type `char **' [-Wformat]
    nulia.c:49:2: warning: format `%s' expects argument of type `char *', but argument 2 has type `char (*)[10]' [-Wformat]


    qui correspondent aux lignes suivantes où scanf est utilisé, avec un paramètre erroné :

    scanf ("%s",&str);
    printf(" donner la cle:");
    scanf ("%s",&key);
    


    vu que
    str
    est déclaré comme étant un
    char *str
    c'est déjà un pointeur sur char et donc le & est inutile.

    de même, vu que
    key
    est déclaré comme étant
    char key[10]
    , c'est un tableau de char, et la référence au nom du tableau correspond à l'adresse à laquelle se situe le premier élément du tableau. Tu as donc déjà un pointeur et le & est de nouveau non nécessaire.

    Note que, sur le reste, je n'ai pas regardé ton code.

    Dal
    1
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Et en profiter pour faire un malloc/calloc de str, sinon plantage assuré :-).
      Pour le reste, pareil, j'ai pas lu.
      0