encrptor 및 decryptor를 프로그래밍하려고합니다. 내 문제는 내가 먼저 값을 할당 포인터는 여전히 두 번째와 같은 값을 가지고있다. 나는 자유롭게 사용하려고 노력했지만 문제는 여전히 동일하다. 예를 들어 , 나는 aslkdjlasc를 입력 (샘플 만) 출력은 다음과 같습니다 helloworld를역 참조 해제, 불량 포인터
내가 RLD가
doctorxRLD
같이 출력 될 것이다 그럼 내가 daskjda 입력 프로그램을 다시 실행하려고 이 포인터의 과거 값으로부터. 그것은 7 문자로만되어 있지만 helloworld가 10이기 때문에 처음 7 글자는 암호화로 대체되지만 마지막 3 글자는 여전히 인쇄됩니다.어떻게해야합니까?
UPDATE : 여기에 코드의 일부입니다 : 여기
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();
}
이 코드는 문자열을 메모리의 정수 크기 (4 바이트)를 할당하는 주요
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();
}
'free()'는 NULL 포인터를 여기에 추가하지 않습니다. –
보이지 않는 코드를 수정하는 방법을 알려줄 수는 없습니다. 당신은 잘못된 것을하고 있지만, 해당 코드 없이는 말할 수없는 것을 정확하게 말하고 있습니다. – Mat
문자열 터미네이터가 누락 된 것 같습니다. 관련 코드를 게시하거나 대답하기 어려울 것입니다. –