我正在尝试编程一个encrptor和decryptor。我的问题是我指定值的指针仍然具有与第二个相同的值。我试图免费使用,但问题仍然是一样的。 例如,我输入了aslkdjlasc(仅限样本) 输出将是: 的HelloWorld
我尝试再次运行程序,然后输入daskjda 输出就像 doctorxRLD
RLD来自此指针的过去值。它应该只有7个字符,但由于helloworld是10,前7个字母被加密取代,但最后3个字符仍然打印。
我该怎么办?
更新:此处是本守则的一部分:
void encrypt(char *crypt)
{
char *plaintext,*encryption,slash=0x2F;
int i,j,k,flags,f;
encryption=(char *)malloc(sizeof(int));
plaintext=(char *)malloc(sizeof(int));
printf("Enter plaintext, spaces,commas,and dots should be represented as /:\n");
scanf("%s",&*plaintext);
for(i=0;i<strlen(plaintext);i++)
{
j=1;flags=0;
while(j<53 && flags==0)
{
if(plaintext[i]==slash)
{
encryption[i]=slash;
flags=1;
}
if(plaintext[i]==crypt[j])
{
encryption[i]=crypt[j-1];
flags=1;
}
k=j+2;
j=k;
}
}
printf("%s",encryption);
free(encryption);
free(plaintext);
getch();
}
这里是主要的
main()
{
char c;
int timer;
char crypt[53]="***i have hidden my encryption code***";
clrscr();
printf("Press e to encrypt, d to decrypt, ESC to exit.\n");
c=getch();
switch(c)
{
case(0x1b):
exit(0);
break;
case(0x64):
decrypt(crypt);
break;
case(0x65):
encrypt(crypt);
break;
default:
printf("INVALID. FORCE EXIT IN 3 SEC0NDS.");
delay(3000);
exit(0);
}
getch();
}
答案 0 :(得分:1)
在您的代码中,您为字符串分配整数大小(4个字节)的内存
当你这样做时
plaintext=(char *)malloc(sizeof(int));
然后通过这样做
scanf("%s",&*plaintext);
您可能正在扫描超过四个字符的字符串(但是您只分配了四个字节)
scanf("%s",&*plaintext);
相当于scanf("%s",plaintext);
(前面的语句表示您正在添加不必要的计算。
答案 1 :(得分:0)
我只使用了2个指针而不是4个。我所做的是在主函数中实例化它们,而不是在每个decrpyt和encrypt函数中实例化它们。像这样:
main()
{
char c,*from, *to; ..........
void encrypt(char *crypt,char *plaintext,char *encryption)
void encrypt(char *crypt,char *ciphertext,char *decryption)
所以当我打电话给他们中的任何一个时,我只是说:
case(0x64):
decrypt(crypt,from,to);
break;
case(0x65):
encrypt(crypt,from,to);
break;
在主要功能的开关结束时:
free(from); from=NULL;
free(to); to=NULL;
所以现在我已经删除了不必要的指针和额外的进程。
谢谢大家。 :)