字符串输入gets和fgets函数的区别

1. gets与fgets

  gets函数原型:char*gets(char*buffer);//读取字符到数组:gets(str);str为数组名。

  gets函数功能:从键盘上输入字符,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。

         读取的换行符被转换为null值,做为字符数组的最后一个字符,来结束字符串。

  注意:gets函数由于没有指定输入字符大小,所以会无限读取,一旦输入的字符大于数组长度,就会发生内存越界,

     从而造成程序崩溃或其他数据的错误。

  fgets函数原型:char *fgets(char *s, int n, FILE *stream);//我们平时可以这么使用:fgets(str, sizeof(str), stdin);

          其中str为数组首地址,sizeof(str)为数组大小,stdin表示我们从键盘输入数据。

  fgets函数功能:从文件指针stream中读取字符,存到以s为起始地址的空间里,知道读完N-1个字符,或者读完一行。

  注意:调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。

2. 细节介绍

在来细说一下fgets的用法,我们以char str[N];fgets(str, N, stdin);为例:

    fgets只能读取N-1个字符,包括最后的'\n',读完结束后系统将自动在最后加'\0'gets读完结束后系统自动会将'\n'置换成'\0')。

    说到这里就有俩种情况了:

一:当你从键盘上输入<=N-1个字符(包括'\n')时,那么字符串str会以‘\n\0’结尾。这就造成了strlen(str)比你想象的大 1 ,

      当然你可以通过下面代码将'\n'去掉。

二:当你从键盘上输入>N-1个字符(包括'\n')时,那么字符串str会以'\0'结尾。

猜你喜欢

转载自blog.csdn.net/u014527548/article/details/77368876