源代码如下:
#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
按照换行解析,故正常输出。
了解了,不过哥们儿能具体说说咱俩测试结果不同的原因嘛?我这Windows
中\r
回车之后得到的结果为啥和你的不一样,是平台函数实现不一样吗还是其它的?
@꧁༺๑♝๑༻꧂: 昨晚回答的比较晚,我的描述的有问题,\r
是光标到行首。至于为什么不同我也不太清楚。我的建议是单步调试跟一跟。