首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求教赋值有关问题

2014-05-24 
求教赋值问题……菜鸟真不给力,求大神指教,双手送分,代码我贴上#include stdio.h#include string.h#incl

求教赋值问题
……菜鸟真不给力,求大神指教,双手送分,代码我贴上求教赋值有关问题


#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "getopt.h"
#include "unistd.h"
#include "assert.h"

char *CONFIG_DBHOST=NULL;
char *CONFIG_DBNAME=NULL;
char *CONFIG_DBUSER=NULL;

struct cfg_line
{
char *parameter;
void *variable;
};

struct cfg_line cfg[]=
{
{"DBHost",&CONFIG_DBHOST},
{"DBName",&CONFIG_DBNAME},
{"DBUser",&CONFIG_DBUSER},
{NULL}
};

void load_config(char *cfg_file,struct cfg_line *cfg)
{
FILE *fd=fopen(cfg_file,"r");
int i,lineno;
char line[2048],*parameter,*value,*lchar="\t",*rchar="\t\r\n";

for(lineno=1;NULL!=fgets(line,sizeof(line),fd);lineno++)
{
if('#'==*line || '\0'==*line)
{
continue;
}
printf("%s",line);
parameter=line;
if(NULL==(value=strchr(line,'=')))
continue;
*value++='\0';
for(i=0;'\0'!=value[i];i++)
{
if('\n'==value[i])
{
value[i]='\0';
break;
}
}
for(i=0;NULL!=cfg[i].parameter;i++)
{
if(0!=strcmp(cfg[i].parameter,parameter))
continue;
printf("in LOAD : %s = %s \n",parameter,value);
//cfg[i].variable=value;
*((char **)cfg[i].variable)=strdup(value);
break;
}
for(i=0;NULL!=cfg[i].parameter;i++)
                printf("in RES : %s = %s \n",cfg[i].parameter,cfg[i].variable);
}
}

void show_config(struct cfg_line *cfg)
{
int i=0;

for(i=0;NULL!=cfg[i].parameter;i++)
printf("%s = %s \n",cfg[i].parameter,cfg[i].variable);
}

int main(int argc,char **argv)
{
char *cfg_file="./zabbix_server.conf";

printf("main start !\n");
load_config(cfg_file,cfg);
show_config(cfg);
return 0;
}





下面是conf文件,叫zabbix_server.conf

### Option: DBHost
#Database host name.
#If set to localhost, socket is used for MySQL.
#If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
# DBHost=localhost
DBHost=192.168.5.85

### Option: DBName
#Database name.
#For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
#
# Mandatory: yes
# Default:
# DBName=

DBName=China

### Option: DBUser
#Database user. Ignored for SQLite.
#
# Mandatory: no
# Default:
# DBUser=

DBUser=zabbix



环境是LINUX,用的GCC
我贴一下结果吧,乱七八糟
main start !
DBHost=192.168.5.85
in LOAD : DBHost 
in LOAD : DBHost = 192.168.5.85 
in RES : DBHost = P

                    in RES : DBName =  
in RES : DBUser =  


DBName=China
in LOAD : DBName 
in LOAD : DBName = China 
in RES : DBHost = P

                    in RES : DBName = p

                                        in RES : DBUser =  


DBUser=zabbix
in LOAD : DBUser 
in LOAD : DBUser = zabbix 
in RES : DBHost = P

                    in RES : DBName = p

                                        in RES : DBUser =  
DBHost = P

           DBName = p

                      DBUser =  


[解决办法]
打印格式同参数要配套...
printf("%s = %s \n",cfg[i].parameter,*(char **)cfg[i].variable);

热点排行