3

ファイルからバイトを読み取ってから、それらを書き換えたかったのです。私はそうしました:

FILE *fp;
int cCurrent;
long currentPos;

/* check if the file is openable */
if( (fp = fopen(szFileName, "r+")) != NULL )
{
    /* loop for each byte in the file crypt and rewrite */
    while(cCurrent != EOF)
    {
        /* save current position */
        currentPos = ftell(fp);
        /* get the current byte */
        cCurrent = fgetc(fp);
        /* XOR it */
        cCurrent ^= 0x10;
        /* take the position indicator back to the last position */
        fseek(fp, currentPos, SEEK_SET);
        /* set the current byte */
        fputc(cCurrent, fp);
    }

ファイルでコードを実行した後、無限ループ内でファイルのサイズが増加しています。

私のコードの問題は何ですか?

4

1 に答える 1

3

に等しい場合でも、あなたはXOR-ingです。一度、それはもはやではないので、あなたのループは決して終了しません。cCurrent0x10EOFXOREOF

ループを無限にし、次のEOFように が表示されたら途中で終了します。

for (;;)  {
    /* save current position */
    currentPos = ftell(fp);
    /* get the current byte */
    if ((cCurrent = fgetc(fp)) == EOF) {
        break;
    }
    /* XOR it */
    cCurrent ^= 0x10;
    /* take the position indicator back to the last position */
    fseek(fp, currentPos, SEEK_SET);
    /* set the current byte */
    fputc(cCurrent, fp);
    /* reset stream for next read operation */
    fseek(fp, 0L, SEEK_CUR);
}
于 2012-11-07T14:29:57.767 に答える