原本打算用正则去获取值,后来发现c里面的正则库太烂了。就没有用正则了。
//去除str前后空格
char *trim(char *str)
{
char *p = (char*)malloc(strlen(str)+3);
memset(p,0,strlen(str)+3);
strcpy(p,str);
int pc=0;
int i;
while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n'){
p ++;
pc++;
}
strcpy(str,p);
i=strlen(str)-1;
while (i>0&&(str[i] == ' ' || str[i] == '\t' || str[i] == '\r' || str[i] == '\n')){
str[i]='\0';
i--;
}
free(p-pc);
return str;
}
//获取键值对的值
//line 一行键值对数据 结构 key value #注释
//key 键
//value 获取的值
int file_value(const char *line,const char* key,char* value)
{
value[0]='\0';
char *p = (char*)malloc(strlen(line)+3);
memset(p,0,strlen(line)+3);
strcpy(p,line);
int pc=0;
while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n'){
p ++;
pc++;
}
int s,e,i;
s=strlen(key);
e=strlen(p);
if(strcmp(p,key)==0){
free(p-pc);
return 0;
}
if(e>s&&p[s] != ' ' && p[s] != '\t' && p[s]!= '\r' && p[s] != '\n'&& p[s] != '#')
{
free(p-pc);
return -1;
}
strcpy(value,p+s);
value[e-s]='\0';
for(i=0;i<strlen(value);i++)
{
if(value[i]=='#')
{
value[i]='\0';
break;
}
}
trim(value);
//printf("value:%s\n",value);
free(p-pc);
return 0;
}