我正在打印文件中的前128个ASCII字符,然后尝试读取打印其ASCII十进制值的那些字符。
我尝试使用fread()和fscanf()函数,但都在读取前25个字符后停止。
#include <stdio.h>
int main()
{
int i;
char ch;
FILE *fp;
fp=fopen("a.txt","w+");
for(i=0;i<128;i++)
{
fprintf(fp,"%c",i);
}
fseek(fp,0,SEEK_SET);
while(fread(&ch, sizeof(char), 1, fp))
printf("%d\n",ch);
return 0;
}
我希望输出为前128个ASCII字符的十进制值,但实际输出中只有前25个ASCII字符的十进制值。
答案 0 :(得分:3)
到达26
时,系统将该值视为文件结束标记。已写入所有128个字节,但在读取时停止在值0x1A
(26)上。此行为是针对文本文件(Windows)的。
我以二进制模式打开了文件,并且可以正常工作。
fp = fopen("a.txt", "wb+");
如果t
中未提供b
或mode
,则默认翻译模式由全局变量_fmode
定义。
此外:您应该检查fopen
的返回值。如果为NULL
,则无法打开文件。您也应该fclose
文件。