【发布时间】:2021-09-05 02:00:55
【问题描述】:
您好,我正在尝试编写代码,如何打印从配置文件中获取值的动态结构 这是包含网关数量的配置文件,每个网关都有不同的参数
nbre_GW = "3"
GW1 = "192.168.1.12;502;1;2;3"
GW2 = "192.168.1.13;505;5;6;45"
GW3 ="192.168.1.14;503;11;12;3"
我正在使用这个结构:
typedef struct {
char IP[12] ;
int port;
int slave [50] ;
} GW_t ;
在执行代码时出现错误分段错误 这个函数读取配置
int readConfig(int gw_nbr)
{
char tmpBuff[8];
char chaine [50] ;
config_t cfg;
const char * l_nbre = NULL;
const char * l_chaine = NULL;
config_init(&cfg);
printf("hello");
//printf("\r\n========================== READING FROM CONFIG FILE ==========================\r\n");
if (!config_read_file(&cfg, CONFIG_FILENAME)) {
fprintf(stdout, "Configuration file not found!");
config_destroy(&cfg);
return -1;
}
printf ("read config file");
if (!config_lookup_string(&cfg, "nbre_GW", &l_nbre)) {
fprintf(stdout, "No 'nbre_GW' setting in configuration file.\r\n");
config_destroy(&cfg);
return -1;
}
gw_nbr = atoi(l_nbre);
gwArray = (GW_t *) malloc (gw_nbr* sizeof(GW_t)) ;
for (int i =1 ; i<= gw_nbr ; i++)
{
sprintf(tmpBuff,"GW%d",i);
if (!config_lookup_string(&cfg, tmpBuff, &l_chaine)) {
fprintf(stdout, "No 'GW' setting in configuration file.\r\n");
config_destroy(&cfg);
return -1;
}
strcpy(chaine, l_chaine);
int len = strlen(chaine);
char d[] = ";";
printf ("first strtok");
char *p = strtok(chaine, d);
strcpy(gwArray[i].IP,p);
p = strtok(NULL, d);
gwArray[i].port = atoi(p);
int j =0 ;
while(p != NULL)
{
p = strtok(NULL, d);
gwArray[i].slave[j] = atoi(p);
j++ ;
}
}
}
【问题讨论】:
-
char IP[12] ;还是太小了。 -
除了@wildplasser 注释之外,考虑到 C 字符串还存储 '\0' 字符,因此您的示例实际上需要 char IP[13] 符号。考虑到诸如“255.255.255.255”之类的 IP 地址的极端情况,您需要 16 个字符来存储它。
-
for (int i =1 ; i<= gw_nbr ; i++)gwArray[0] 中) -
什么是
config_lookup_string?您可以链接到 repo 以便我们可以下载并尝试运行代码吗?您是否尝试过在调试器中运行它,或者使用 Address Sanitizer?
标签: c ubuntu segmentation-fault config