源代码如下:
#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是光标到行首。至于为什么不同我也不太清楚。我的建议是单步调试跟一跟。