fgets()函数 用来从文件中读取字符串

原型 char* fgets(char *buf,int size,FILE *stream);

参数:

*buf:字符型指针,指向用来存储所得数据的地址。

size:整型数据,从stream流中读取的字节数目。

*stream:文件结构体指针,将要读取的文件流。

功能:

从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取size-1个字符(第size个字符赋值‘\0'),如果文件中的该行,不足size个字符,则读完改行就结束,如果函数读取成功,则返回指针buf,失败则返回NULL。

如果使用fges()读取某个文件。

(1)第一次读取的size为5,而文件的第一行有10个字符(算上'\n'),那么读取文件的指针会偏移至当前读取完的这个字符之后的位置。

(2)如果使用fgets()函数想完整的读取一行的数据,则size至少为该行的字符数+2(一个保存字符串本身的结束标识’\0',一个保存文件本身的换行符‘\n')。即使size大于该行的字符数+2,文件也不会继续读下一行,仅读取当前行的数据,文件指针会自动偏移都下一行。如果size等于该行的字符数+1,则将该行的字符读取完成,但换行符还没读取,下一次fgets()时会只读取换行符。

(3)假如定义 char buf[bufsize];而size>bufsize, buf数组的容量小于从stream流中读取的数据,会溢出buf存放,可能会产生意想不到的结果,即多出来的数据可能覆盖某个标量的数据。

gets()函数 从stdio流中读取字符串,直到换行符或EOF停止,并将读取的结果存放到buffer指针指向的字符数组中

原型:char* gets(char* buffer);

换行符不作为读取的内容,读取的换行符被转换为NULL,并由此来结束字符串。

gets(s)函数和scanf("%s",s)相似,但不完全相同,使用scanf("%s",s)函数,如果输入了空格则认为字符串结束,但gest(s)函数则是遇到换行符停止。

fgets(s,n,stdin)和 gets(s)实现功能差不多,但n指定了读取数据的大小,避免读取过多的字符而使s溢出。即n要确保不大于s所指向的字符数组的大小。