我尝试使用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 *«
答案 0 :(得分:1)
您只需要在*
的声明中删除一个channel
。如果您这样做,也可以在printf
来电中删除演员。
它现在“正在工作”的原因是演员隐藏了关于你的printf
格式的第二个警告。你的程序就像已经删除了额外的*
一样 - 只是以一种令人困惑的方式。