C 语言中的 fgets()

转自:http://blog.csdn.net/daiyutage/article/details/8540932

原型:

  char *  fgets(char * s, int n,FILE *stream);

参数:

  s: 字符型指针,指向存储读入数据的缓冲区的地址。

  n: 从流中读入n-1个字符。

  stream : 指向读取的流。

返回值:

  1. 当n<=0 时返回NULL,即空指针。

  2. 当n=1 时,返回空串""。

  3. 如果读入成功,则返回缓冲区的地址。

  4. 如果读入错误或遇到文件结尾(EOF),则返回NULL。

标准库中的实现:

char *fgets(char *s, int n,  FILE *stream)  
{  
     register int c;  
     register char *cs;  
     cs=s;  
     while(--n>0 &&(c = getc(stream))!=EOF)  
       if ((*cs++=  c) =='
')  
        break; *cs =''; return (c == EOF && cs == s) ?NULL :s ; }

注意:

在用fgets(..)读入数据时,先定义一个字符数组或字符指针,如果定义了字符指针 ,那么一定要初始化。

example:

              char s[100]; //可以。

              char *s;  //不可以,因为只是声明了一个指针。但并没有为它分配内存缓冲区。

所以,如果要用指针,则  char *s=(char *)malloc(100*sizeof(char)) 为其分配内存空间,c++中用char *s=new char [100]。如果未分配内存空间,编译时不会检查出问题,但运行时会出现未知错误(曾经出现过的错误是“段错误(核心已转储)”)。

有关 “段错误(核心已转储)” 的可能原因详见:Linux 下运行 C++ 程序出现 “段错误(核心已转储)”

原文地址:https://www.cnblogs.com/sylar5/p/6638099.html