C语言中gets(char*);可以从标准输入中读入一行字符,存入字符串;而用fgets(char*,int,FILE*)可以从文件读入一行字符,其中的整型参数指的是缓冲区大小。
我之前以为get(s)和fgets(s,length,stdin)在不考虑溢出的问题时,行为是完全相同的,但是今天发现它们有个细微的差别。
用下面的代码测试:
#include<stdio.h> int main(){ char a[100]; gets(a); printf("#%s#\n",a); fgets(a,100,stdin); printf("#%s#\n",a); return 0; }
当两次的输入均为abc时,程序执行的结果如下(红色为输入):
abc
#abc#
abc
#abc
#
这说明gets在读入的时候,’\n’没有存入字符串中;而fgets在读入的时候,’\n’被加在了字符串结尾。
感觉也比较好理解,如果输入的是文件,则是逐行读取,返回字符数组。gets则是读取行,去掉尾部’\n’添加’’,返回的是字符串。很好奇在windows下输入会不会有什么不同?