Compile pas !!

Fermé
Nulia - Modifié par Nulia le 11/12/2014 à 19:26
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 13 déc. 2014 à 15:08
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

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 12/12/2014 à 16:24
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
13 déc. 2014 à 15:08
Et en profiter pour faire un malloc/calloc de str, sinon plantage assuré :-).
Pour le reste, pareil, j'ai pas lu.
0