转自:http://gcody.wwww.blog.ccidnet.com/blog-htm-do-showone-uid-36931-type-blog-itemid-114988.html

自己今天根据项目里的需要编写出来的很简单的函数,读取配置文件的一行内容,配置文件格式为:

#888888注释

name = value

可以包含注释,不用考虑空格,和项目名称大小写,函数返回项目内容。

#ifndef READCONF_H

#define READCONF_H

#include "head.h"

#define CONLINELENGTH 1024 //配置文件一行的长度最大值

char *ReadConfigfile(char *fileName, char *item);

#endif

#include "readconf.h" /************************** *函数功能:读取配置文件的一行信息 *输入参数:配置文件的名字fileName,要读取的项目名称item(不用考虑空格及大小写) *输出结果:项目信息 *返回值:成功返回信息内容,出错返回NULL *******************************/ char *ReadConfigfile(char *fileName, char *item) {  FILE *fp;  char *locate = NULL;  char *pmove = NULL;  char confLine[CONLINELENGTH] = {};  char context[CONLINELENGTH] ={};  int result = 1;  char *pline;  int itl;       if((fp = fopen(fileName, "r")) == NULL)  {   printf("Open file : %s failed!!/n", fileName);    return NULL;  }    while(fgets(confLine, CONLINELENGTH, fp) != NULL)  {   pline = confLine;   if(*pline == '#')   {    memset(confLine, '0', CONLINELENGTH);    continue;   }   while(isspace(*pline) != 0)pline++;   locate = strchr(pline, '=');   if(locate == NULL)                 {           memset(confLine, '0', CONLINELENGTH);                         continue;                 }   pmove = locate;   pmove--;   while(isspace(*pmove) != 0)pmove--;   itl = pmove - pline + 1;   if(itl == strlen(item))   {       result = strncasecmp(pline, item, itl);    if(result == 0)    {     locate++;     while(isspace(*locate) != 0)locate++;     pmove = locate;     while(isspace(*pmove) == 0)pmove++;     if(pmove-locate+1>0)     {      strncpy(context, locate, pmove-locate+1);      break;     }     else     {      return NULL;     }    }    else    {     memset(confLine, '0', CONLINELENGTH);     continue;    }   }   else   {    memset(confLine, '0', CONLINELENGTH);    continue;    }  }  fclose(fp);    return context; }

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐