1
#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;
}

我回避了一些棘手的事情

  1. 文件以二进制模式打开
  2. 在 encryptStrA 中,strlen 函数没有直接放在循环条件中

尽管如此,它仍然输出的是“Hell”而不是“Hello World!”?更准确地说,是在找到关键人物后将所有内容都剪掉。原因是什么?我使用操作系统,其中每一行文本都以回车符(ASCII 13)和换行符(10)结束。

4

1 回答 1

3

该代码fprintf("%s", s);期望 s 是一个以零结尾的字符串。当您到达'o'^111它时,它会给出一个空字符,因此字符串的其余部分不会写入文件。

你可以fwrite改用。

于 2012-05-01T20:28:05.490 回答