2

libconfigを使用してacプログラムをセットアップしようとしています。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

この警告を取り除くにはどうすればよいですか?

const char *channel宣言をおよび output に変更するとprintf("argumente = %s\n", channel);、開始時にセグメンテーション違反が発生し、コンパイル時に次のような警告が表示されます...Detailed: »const char **« expected, but argument has typ »const char *«

4

1 に答える 1

1

*の宣言で1 つを取り除くだけで済みますchannel。その場合、printf呼び出しでキャストを削除することもできます。

現在「機能している」理由は、キャストがフォーマットに関する2番目の警告を隠しているためprintfです。あなたのプログラムは、余分なものがすでに削除されたように動作し*ています-混乱した方法で。

于 2012-09-14T15:25:24.290 に答える