今天看了一篇名为“a bug of fread?”的博文,没找到原因,就贴在这里,等哪位高手。
首先,程序的目的是读取文件(readme.txt)并打印内容,我用Visual Studio 2010对其进行了测试。
自述文件的内容是:
1234;
abcd;
ABCD;
自述文件的十六进制值为:
31 32 33 34 3b 0d 0a 61 62 63 64 3b 0d 0a 41 42 43 44 3b
这是代码:
#include <stdio.h>
#include <string.h>
#define BUF_SIZE 1024
int main()
{
FILE *fp = NULL;
int rcnt = 0;
char rbuf[BUF_SIZE];
fp = fopen("readme.txt", "r");
if (NULL == fp)
{
printf("fopen error.\n");
return -1;
}
printf("--------------------------\n");
memset(rbuf, 0, BUF_SIZE);
fseek(fp, 0, SEEK_SET);
rcnt = fread(rbuf, 1, BUF_SIZE, fp);
printf("read cnt = %d\n", rcnt);
printf("%s\n", rbuf);
return 0;
}
这样一个简单的代码,预期的结果是:
--------------------------
read cnt = 17
1234;
abcd;
ABCD;
总共 17 个计数包括 15 个字符和 2 个“\n”。
但我得到了以下结果:
--------------------------
read cnt = 17
1234;
abcd;
ABCD;D;
PS:如果用“rb”调用fopen函数,或者如果将宏BUF_SIZE定义得更小,我得到了正确的结果。