2
FILE *hFile;
fopen_s(&hFile, "D:\\temp\\test.txt", "rb+");
char Buf[100]; 
int dwRead1 = fread(&Buf[0], sizeof(char), 10, hFile);  
fwrite("Hello,", sizeof(char), 6, hFile); 
int dwRead2 = fread(&Buf[0], sizeof(char), 10, hFile);

正如我所猜测的,dwRead1 为 0。但为什么 dwRead2 = 10,而不是 0?在 Buf 中,虽然我只写了 6 个字节,但我看到了一个垃圾,在它们之后就没有别的东西了。

4

2 回答 2

4

您正在观察未定义的行为。

引用fopen手册页:

当以更新模式(模式参数中的第二个或第三个字符为“+”)打开文件时,可以在关联的流上执行输入和输出。但是,应用程序应确保在没有对 fflush() 或文件定位函数(fseek()、fsetpos() 或 rewind())的介入调用的情况下,输出不直接跟在输入之后,并且输入不直接跟在输入之后输出没有对文件定位函数的干预调用,除非输入操作遇到文件结尾。

在and调用fflush之间放置应该可以解决您的问题。fwritefread

于 2013-10-08T14:20:44.353 回答
0

You need to call fseek(hFile, 0, SEEK_SET) to read "Hello," from the beginning of the file (if it was empty of course). It all happen because fwrite(..) and fread() change position indicator of stream hFile and fread is trying to read right from the end of the stream in this case.

于 2013-10-08T14:31:47.223 回答