J'écrivais un programme en c pour vignere cipher, quand dans une fonction pour générer la clé comme la même longueur de nom d'entrée, j'ai rencontré un bug où si je supprime la ligne "printf" affichant la longueur de la chaîne d'entrée, imprime des trucs bizarres sur le sceen, cela n'arrive que lorsque je supprime cette ligne "printf" de la fonction GenKey().C: Programme imprime des trucs bizarres dans la sortie, après avoir supprimé printf de la fonction char
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *GenKey(char *key, char *source){
int i=0,j=0;
char ReturnKey[strlen(source)];
printf("%d\n",strlen(source)); // THIS LINE HERE CAUSES PROBLEM
for(i=0;i<strlen(source)-1;i++){
if(j==strlen(key)){
j=0;
}
ReturnKey[i]=key[j];
j++;
}
return ReturnKey;
}
int main()
{
int i;
char name[10000];
char container[10000];
char VigKey[]="INFERNO";
char *NamePtr;
char *KeyPtr;
printf("give a name: ");
fgets(name,10000,stdin);
char GeneratedKey[strlen(name)];
KeyPtr=VigKey;
NamePtr=name;
strcpy(GeneratedKey,GenKey(KeyPtr,NamePtr));
printf("%s",GeneratedKey);
}
sortie (Avant de supprimer cette ligne):
give a name: ATTACKATDAWN
13
INFERNOINFER
Maintenant, je supprimer cette ligne
char *GenKey(char *key, char *source){
int i=0,j=0;
char ReturnKey[strlen(source)];
// NOW I HAVE DELETED THAT LINE
for(i=0;i<strlen(source)-1;i++){
if(j==strlen(key)){
j=0;
}
ReturnKey[i]=key[j];
j++;
}
return ReturnKey;
}
sortie (Après la suppression de cette ligne):
give a name: ATTACKATDAWN
INFERNOINFERα╫`
vous retournez un pointeur vers la mémoire c'est déjà sorti. Après une fonction retournée, les variables locales automatiques n'existent plus. – zerkms
Activer les avertissements du compilateur. –