首页 新闻 会员 周边 捐助

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

0
悬赏园豆:20 [已解决问题] 解决于 2022-03-30 10:11

源代码如下:

#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
??

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

꧁༺๑♝๑༻꧂的主页 ꧁༺๑♝๑༻꧂ | 初学一级 | 园豆:184
提问于:2022-03-28 17:59
< >
分享
最佳答案
1

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

收获园豆:20
寂静的羽夏 | 老鸟四级 |园豆:2129 | 2022-03-28 21:48

了解了,不过哥们儿能具体说说咱俩测试结果不同的原因嘛?我这Windows\r回车之后得到的结果为啥和你的不一样,是平台函数实现不一样吗还是其它的?

꧁༺๑♝๑༻꧂ | 园豆:184 (初学一级) | 2022-03-29 00:45

@꧁༺๑♝๑༻꧂: 昨晚回答的比较晚,我的描述的有问题,\r是光标到行首。至于为什么不同我也不太清楚。我的建议是单步调试跟一跟。

寂静的羽夏 | 园豆:2129 (老鸟四级) | 2022-03-29 09:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册