2

私が実行した場合:

FILE* pFile = fopen("c:\\08.bin", "r");
fpos_t pos;
char buf[5000];

int ret = fread(&buf, 1, 9, pFile);
fgetpos(pFile, &pos);

ret=9およびpos=9になります。

しかし、私が実行した場合

FILE* pFile = fopen("c:\\08.bin", "r");
fpos_t pos;
char buf[5000];

int ret = fread(&buf, 1, 10, pFile);
fgetpos(pFile, &pos);

ret = 10ですが、pos = 11!

どうすればいいの?

4

2 に答える 2

8

ファイルをバイナリモードで開く必要があります。

FILE * pFile = fopen("c:\\08.bin", "rb"); 

違いは、ライブラリが改行であると考える文字を読み取り、それを拡張することによって引き起こされます-バイナリモードは拡張を防ぎます。

于 2009-08-14T17:46:07.877 に答える
1

それはWindowsのものです。テキストモードでは、Windowsは書き込み時に'\n'を'CR''LF'に展開し、読み取り時に'CR''LF'を'\n'に圧縮します。テキストモードは、Windowsのデフォルトモードです。Neilが述べているように、fopen()のモード文字列に「b」を追加すると、改行の変換がオフになります。*nixシステムではこの翻訳はありません。

于 2009-08-14T18:21:35.887 に答える