Compile pas !!
Bonjour,
j'ai un petit probleme avec mon algo ...ilcodage m'affiche plein de fautes
voila le code
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
-
ContributeurBonjour 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 questr
est déclaré comme étant unchar *str
c'est déjà un pointeur sur char et donc le & est inutile.
de même, vu quekey
est déclaré comme étantchar 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