C/C++中有fgets,但须要指定读取的长度,有时我们无法预计行的大小,在使用fgets时比较麻烦,故参考网友一些建议,写了一个可以实现按行读文本文件,不用担心 预先定义的buff太小 的函数。但需要注意的是,在使用此函数时,需对变量Out_Buff进行手工释放。
/*----------------------------------------------
功能描述:按行读取文件
入口参数:
In_fpr --已打开的文件指针或有效的流指针
Out_Buff --返回读取的数据
Out_LineSize --返回读取数据大小(既一行的大小)
返回值:
返回当前读取文件的行号
-------------------------------------------------*/
staitc size_t sizet_fgetline(FILE *In_fpr, char **Out_Buff, size_t *Out_LineSize)
{
size_t linesize = 0;
static size_t lineno = 0;
int buf;
if(*Out_Buff == NULL)
{
Out_LineSize = MAXSIZE;
*Out_Buff = (char *)malloc(*Out_LineSize);
}
while((buf=fgetc(In_fpr))!=EOF)
{
if(buf == '\n')
{
lineno++;
break;
}
linesize++;
*(*Out_Buff+linesize-1) = buf;
*(*Out_Buff+linesize) = '\0';
if(*Out_LineSize <= linesize)
{
*Out_Buff = (char *)realloc(*Out_Buff,linesize*2);
}
}
*Out_LineSize = linesize;
return lineno;
}