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. encodeStrAでは、strlen関数はループ状態に直接配置されません

それにもかかわらず、「HelloWorld!」ではなく「Hell」を出力しているのですか?より正確には、キーキャラクターを見つけた後にすべてをカットします。理由は何ですか?テキストのすべての行がキャリッジリターン(ASCII 13)とラインフィード(10)で終了するOSを使用しています。

4

1 に答える 1

3

このコードfprintf("%s", s);は、sがゼロで終了する文字列であることを想定しています。到達'o'^111するとヌル文字が返されるため、残りの文字列はファイルに書き込まれません。

代わりに使用できますfwrite

于 2012-05-01T20:28:05.490 に答える