C语言中fgets和fscanf区别详解
一、作用上的大概区别:
1
2
3
|
① fgets :从文件中读取一行数据存入缓冲区( fgets 遇到回车才会结束,不对空格和回车做任何转换就录入到缓冲区,结束后再往缓冲区写多一个\0,所以它是读一行数据) ② fscanf :从文件中读取一段数据存入缓冲区( fscanf 遇到空格或回车就结束,它会把空格或回车转换为\0,所以它是读一小段数据) |
二、举个例子:把a.txt文件中的内容复制到b.txt。
a.txt中的内容(第一行中“我爱你小白”和“开玩笑”中间有个空格,每行的最后都有回车):
1
2
3
|
我爱你小白 开玩笑 哈哈 开玩笑 |
1、使用fgets读取a.txt文件并写入到b.txt的程序片段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
FILE *f1 = fopen ( "a.txt" , "r" ); //只读方式打开a.txt,该文件必须存在 FILE *f2 = fopen ( "b.txt" , "w" ); //以只写方式打开b.txt,该文件可以不存在 if (f1 == NULL) //如果文件不存在,直接结束 { return 0; } char buf[1024] = { 0 }; //缓冲区 while (! feof (f1)) { memset (buf, 0, sizeof (buf)); //清空缓冲区 fgets (buf, sizeof (buf), f1); //从文件中读取一行数据存入缓冲区(fgets遇到回车才会结束,不对空格和回车做任何转换就录入到缓冲区,结束后再往缓冲区写多一个\0,所以它是读一行数据) fputs (buf, f2); } fclose (f1); //注意最后关闭文件 fclose (f2); //注意最后关闭文件 |
运行结果:
2、使用fscanf读取a.txt文件并写入到b.txt的程序片段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
FILE *f1 = fopen ( "a.txt" , "r" ); //只读方式打开a.txt FILE *f2 = fopen ( "b.txt" , "w" ); //以只写方式打开b.txt,该文件可以不存在 if (f1 == NULL) //如果文件不存在,直接结束 { return 0; } char buf[1024] = { 0 }; //缓冲区 while (! feof (f1)) { memset (buf, 0, sizeof (buf)); //清空缓冲区 fscanf (f1, "%s" , buf); //从文件中读取一段数据存入缓冲区(fscanf遇到空格或回车就结束,它会把空格或回车转换为\0,所以它是读一小段数据) fputs (buf, f2); } fclose (f1); //注意最后关闭文件 fclose (f2); //注意最后关闭文件 |
运行结果:
三、结论
1
2
3
|
1、 fgets 遇到“空格”就跟遇到平常的字符一样读取,遇到“回车”则结束本次读取,最后往缓冲区( char *buf[])的最后加多一个 "\0" 表示本次读取一行结束。 2、 fscanf 不论遇到“空格”还是“回车”,都当作 '\0' 读取到缓冲区中( char *buf[]),并结束本次读取。 |
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
原文链接:http://blog.csdn.net/csdn_lqr/article/details/52170717