Я пытаюсь запрограммировать encrptor и decryptor. Моя проблема - это указатель, который я присвоил значение во-первых, все еще имеет то же значение, что и второе. Я пытался использовать бесплатно, но проблема все та же. Например, я напечатал aslkdjlasc (образец только) и результат будет: HelloWorldУказатели разыменования, неправильные указатели
Я пытаюсь запустить программу еще раз, то я типа daskjda результат будет как doctorxRLD
RLD является из прошлого значения этого указателя. Предполагается, что это только 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();
}
ЗДЕСЬ ГЛАВНЫЙ
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
Кажется, что вам не хватает терминатора строк. Пожалуйста, разместите соответствующий код или это будет сложно ответить. –