1、fgets函数的特点:
读取n-1(n为数组个数,第n个位置会自动添加‘\0’)个字符,以'\n'为结束标记,并在读取到‘\n’之后,在末尾处添加'\0'构成字符串;
当读了n-1个字符后,仍未读到'\n',也会自动添加‘\0’,结束读取。
2、fgets的返回值:
成功:返回指向该串的指针,
失败或读到文件结尾返回空指针,
所以可以通过fgets的返回值来判断文件是否读完
3、fgets经常用来读取配置文件的内容
配置文件cfg.ini内容如下:
注意:
1)配置文件的标题是用中括号[]----->这个与QSettings的格式类型完全一样。
2)标题下内容用=赋值,中间不要加空格了,否则读取的时候麻烦。
3)最后一行内容写完之后一定要回车(文中可以看到是有8行)
4、fgets示例
char* func(const char *filename,const char*title,const char *key)
{
FILE *fp = fopen(filename,"r");
if(!fp)
{
perror("fopen");
return NULL;
}
static char buff[1024];//定义足够长的缓冲区来读取每行,防止读不全;//因为要返回char*,所以此处为static
char *p;//指向字符串中‘=’位置的指针
char new_title[1024]; //构造出[]形式
sprintf(new_title,"[%s]",title);
int length = strlen(new_title);
bool flag = false;
while(fgets(buff,1023,fp))//最多读取1023个字符
{
if(strncmp(buff,new_title,length)==0)
{
flag = true;
continue;
}
if(flag)
{
if(strncmp(buff,key,strlen(key))==0)
{
p = strchr(buff,'=');
if(p)
{
buff[strlen(buff)-1] = '\0';//将末位的'\n'替换为'\0'
fclose(fp);
return p+1;
}
}
}
}
}
void main()
{
char* str = func("cfg.ini","uSER", "NAME" );
cout<<str;
}