0

そのため、Win7x64ではfreadが予期しない動作をしています。

file = fopen(path, "rb");
fseek(file, 0, SEEK_END);
fileSize = ftell(file);
fseek(file, 0, SEEK_SET);
buffer = malloc(fileSize);
length = fread(buffer, fileSize, 1, file);

freadは読み取られたときに1バイトを返しますが、(ferrorとfeofは両方とも0を返します)

length = fread(buffer, 1, fileSize, file);

freadは、fileSizeと同じバイト数を返します。MSDNによると、「fread関数は、入力ストリームからサイズバイトのアイテムをカウントアップして読み取り、それらをバッファーに格納します。」これは、どちらのコードも同じ量のデータを読み取る必要があることを意味すると解釈します。なぜfreadが期待どおりに機能しないのか誰かが知っていますか?

4

2 に答える 2

2

彼らは同じ量のデータを読み取ります。読み取られたバイト数は、sizeパラメーターにパラメーターを掛けたものcountです。返されるのは、読み取られたアイテムの数です。

したがって、最初のケースでは、サイズfileSizeの1つのアイテムを要求し、1を返しました。2番目のケースでは、サイズ1のfileSizeアイテムを要求し、fileSizeを返しました。

于 2013-01-02T18:18:32.553 に答える
1

fread読み取られたバイト数ではなく、「実際に読み取られた完全なアイテムの数」を返します。

fread(buffer, fileSize, 1, file);サイズ1のアイテムを読み取っている場合(fileSizeしたがってfread、成功すると1が返されます)、fread(buffer, 1, fileSize, file);サイズfileSize1のアイテムを読み取っている場合は、読み取られたバイト数が返されます(予想どおり)。

于 2013-01-02T18:18:25.440 に答える