#include <Windows.h>
#include <cstdio>
const int KEY=111;
void encryptStrA(char* sometext)
{
int length;
length=strlen(sometext);
for(int i=0; i<length;i++)
sometext[i]^=KEY;
}
int main(void)
{
FILE* pFile=fopen("pliczek","wb");
char sign;
char sampleString[]="Hello world!";
encryptStrA(sampleString);
fprintf(pFile,"%c%c%s%c%c",13^KEY,10^KEY,sampleString,13^KEY,10^KEY);
fclose(pFile);
pFile=fopen("pliczek","rb");
while(!feof(pFile))
{
fscanf(pFile,"%c",&sign);
printf("%c",sign^KEY);
}
fclose(pFile);
system("PAUSE");
return 0;
}
我避开了一些棘手的事情
- 文件以二进制模式打开
- 在 encryptStrA 中,strlen 函数没有直接放在循环条件中
尽管如此,它仍然一直在输出“Hell”而不是“Hello World!”?更准确的说,是看到关键人物之后就全部砍掉。这是什么原因?我使用的操作系统中的每一行文本都以回车符 (ASCII 13) 和换行符 (10) 结尾。
最佳答案
代码 fprintf("%s", s);
期望 s 是一个以零结尾的字符串。当您到达 'o'^111
时,它会给出一个空字符,因此字符串的其余部分不会写入文件。
您可以使用 fwrite
相反。
关于c - 解码文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403840/