我只是想做一个显然根本不安全的简单加密。一切都很好,但我得到了不可打印的字符,如新行或nul。解码时成为问题。如何在此代码中解决此问题?
#include <stdio.h>
#include <string.h>
int main()
{
int i;
char text[1024];
printf("ENTER SOME TEXT \n");
fgets(text, 1024, stdin);
for(i=0;i<strlen(text)-1;++i)
{
if(text[i]!=32)
text[i] ^= i;
}
printf("encoded text : %s",text);
getch();
return(0);
}
答案 0 :(得分:1)
当然你会得到不可打印的字符,这是对值进行异或的直接后果。与您的想法相反, 不 在解码时会出现问题。 在解码时会出现问题,是if(text[i]!=32)
检查,这是a)无用,b)破坏输出流。摆脱这个,你应该得到一个流,当然包含不可打印的字符,因为它应该,并且应该解码得很好。如果您仍然遇到问题,请务必发布尝试解码流的代码。
另外,考虑到下面的JakišaTomić的评论(虽然不完全符合措辞),你需要循环到strlen(text)
而不是strlen(text)-1
,这样空字符终结符也会被编码到输出流,以便您知道解码时何时停止。