fgets()函数的使用分析

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章