一、fgets函数简介
fgets函数功能为从指定的流 stream 读取一行,并把它存储在str所指向的字符串内。当读取(n-1)个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
二、fgets
1、fgets函数头文件
#include <stdio.h>
2、fgets函数声明
char *fgets(char *str, int n, FILE *stream);
3、fgets函数形参、返回值
str:这是指向一个字符数组的指针,该数组存储了要读取的字符串。
n:这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
stream:这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
返回值:如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。
在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则stream保持原来的内容,返回NULL;如果发生读入错误,error指示器被设置,返回NULL,stream的值可能被改变。
4、使用示例
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp = NULL;
char buf[64] = {0};
fp = fopen("./test.txt", "r");
if (fp != NULL)
{
while (fgets(buf, sizeof(buf), fp))
{
printf("buf=%s\n", buf);
}
fclose(fp);
}
return 0;
上述代码段会读取test.txt文件,通过fgets函数读取每一行字符串。
5、fgets函数实现
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函数,形参一会被赋予读取到的字符,并在最后赋值于’\0’。
三、总结
记得配合sscanf函数使用效果更棒。