0

次のスニペットを考えると、finランダムなテキストが含まれており、data常に a が続きますcommand

#define COMMANDSIZE 16
#define DATASIZE 128

int i, j, k, ch;

char command[COMMANDSIZE];
char data[DATASIZE];

FILE* fin;
FILE* fout;

fin = fopen("input.txt", "r");
fout = fopen("output.txt", "w");

fseek(fout, 0, SEEK_SET);

while ((ch = fgetc(fin)) != EOF)
{
    for (i = 0; i < sizeof(command); i++) //obtain command from input stream
    {
         command[i] = fgetc(fin) & 0xff;
    }

    for (j = 0; j < sizeof(data); j++) //obtain data from input stream
    {
         data[j] = fgetc(fin) & 0xff;
    }

    for (k = 0; k < sizeof(data); k++) //write data to output stream
    {
         fseek(fout, /* computed block address */, SEEK_CUR);
         fputc(data[k], fout);
    }
}

fclose(fout);
fclose(fin);

入力ファイルと出力ファイルを比較すると、入力ファイルの一部のデータが引き継がれませんでした。したがって、上記をwhile(1)で実行してみましたが、入力ファイルの一部のデータが引き継がれませんでしたが、 を使用した場合と同じデータでwhile((ch = fgetc(fin)) != EOF)はなく、異なる出力ファイル間に交差 (重複) がありませんでした。

入力ファイルのすべてのデータが出力ファイルに確実に書き込まれるようにするにはどうすればよいですか? これはfgetc()and/or と関係がありfputc()ますか?

4

2 に答える 2

2

ここでいくつかのことがわかりません。

while ((ch = fgetc(fin)) != EOF)

読んだばかりのキャラクターを捨てるつもりですか?

fseek(fout, 1, SEEK_CUR);

なぜ1バイト先にスキップするのですか?書き込みは自動的にファイルを進めます。ファイルの位置を2回進めたいとは思わない。

于 2013-10-18T13:49:48.943 に答える