C语言中的gets()与fgets()

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’被加在了字符串结尾。

《C语言中的gets()与fgets()》有一个想法

  1. 感觉也比较好理解,如果输入的是文件,则是逐行读取,返回字符数组。gets则是读取行,去掉尾部’\n’添加’’,返回的是字符串。很好奇在windows下输入会不会有什么不同?

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注