项目需要,今天写了个加载config.ini文件的模块和生成.xml格式日志文件模块
由于 .ini 文件的主要属性是key=value,所以一看就想到了使用map来存放里面的内容,但是c语言中并没有提供这样的容器,而自己实现一个map有点难,
所以就转换了思路,使用一个链表来存放键值对,如果config.ini内容太多,在效率上链表肯定是有损失,因为每次的查找一个key ,都要遍历整个链表。
链表结点结构为 struct node { char *key ; char *value; struct node *next };
其中主要的方法为:char *getValue(list *lst,const char *key) 而这里需要使用到strcmp(temp->key,key),需要注意的是strcmp相等返回0,而我在代码里写了if(strcmp()) 导致出错,调试了好长时间才找出错误所在,真让人纠结。
而读config.ini并把内容存放进链表的方法中,主要是读入每一行,判断是否以‘#’ 开头,为注释 ,如果不是,使用strtok计算出key和value
while(!feof(fp))
{
fgets(temp,100,fp)
if('#' == temp[0]) continue;
key = strtok(temp,delims)
value = strtok(NULL,delims);
addNode(&lst,key,value)
}
fclose(fp);