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

 

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