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