2

我尝试使用 libconfig 设置交流程序。有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 文件

价值={频道=“你好”;}

如果我编译它

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和 output printf("argumente = %s\n", channel);,我会在开始时收到段错误,并在编译时收到警告,例如...Detailed: »const char **« expected, but argument has typ »const char *«

4

1 回答 1

1

*你只需要在你的声明中去掉一个channel. 如果这样做,您还可以删除printf通话中的演员表。

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

于 2012-09-14T15:25:24.290 回答