エンクリプターとデクリプターをプログラムしようとしています。私の問題は、最初に値を割り当てたポインタがまだ2番目と同じ値を持っていることです。free を使用しようとしましたが、問題は同じです。たとえば、aslkdjlasc (サンプルのみ) と入力すると、出力は次のようになります。
プログラムを再度実行しようとすると、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();
}