使用.cfg文件指针的警告

时间:2012-09-14 15:21:35

标签: c linux ubuntu-12.04 libconfig

我尝试使用libconfig设置c程序。有example1.c:

int main() 
{   
  const char **channel;

  config_t config;

  config_init(&config);

  config_read_file(&config, "example.cfg");
     if( config_lookup_string(&config,"value.channel",&channel) == CONFIG_FALSE)  
     {
        printf("Failed to read fields\n");
        return 1;  
     }
       printf("argumente = %s\n", (char *)channel);
       return 0; 
}

和example.cfg文件

  

value = {channel =“hello”; }

如果我编译它

  

gcc example1.c -lconfig

它说:

example1.c:39:3: Warning: delivery of arguments 3 from »config_lookup_string« of a incompatible pointer
/usr/include/libconfig.h:244:26: Detailed: »const char **« expected, but argument has typ »const char ***«

有趣的是它有效...输出是: argumente = hello

我怎样摆脱这个警告?

如果我将decleration更改为const char *channel和输出printf("argumente = %s\n", channel);,我会在开始时收到段错误,并在编译时收到警告,例如...... Detailed: »const char **« expected, but argument has typ »const char *«

1 个答案:

答案 0 :(得分:1)

您只需要在*的声明中删除一个channel。如果您这样做,也可以在printf来电中删除演员。

它现在“正在工作”的原因是演员隐藏了关于你的printf格式的第二个警告。你的程序就像已经删除了额外的*一样 - 只是以一种令人困惑的方式。