转自: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) =='\n')
break; *cs ='\0'; 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++ 程序出现 “段错误(核心已转储)”