关于 fopen 打开模式与 fgets 读取的问题

源代码如下:

#include <stdio.h>
int main(void)
{
FILE *fp = fopen("file.txt", "rb");
char str[10];
fgets(str, 7, fp);
printf("??%s??", str);
return 0;
}

file.txt文本文件编码是UTF-8,内容如下

world

问题是fgets参数为7时,输出是?? orld,修改printf%s左右的?会得到不同结果,很奇怪;
当把rb改为r时,输出

??world
??

结果又一切正常…烦请大家解惑!

回答

windows中,换行符为\r\n,而不是\n,如果仅仅表示\r,就是回到控制台开始位置,也就是说,你参数填7的时候,实际上读取的是world\r,也就是说,你打印??world那一刹那,开始打印\r,然后回到初始位置,然后继续打印??,最终打印??world,这个是我的测试结果,这个也是按照字节解释的结果,如果按照文本模式读取,换行符\r\n按照换行解析,故正常输出。

以上是关于 fopen 打开模式与 fgets 读取的问题的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>