2011-07-15 21 views
0
static void build_preprocess_command(int e_flag) 
{ 
    ivlpp_main(argc, argv); 
    snprintf(tmp, sizeof tmp, "%s%civlpp %s%s -F\"%s\" -f\"%s\" -p\"%s\" ", 
      pbase, sep, verbose_flag?" -v":"", 
      e_flag?"":" -L", defines_path, source_path, 
      compiled_defines_path); 
} 

ivlpp_main()でsnprintfの引数をargcまたはargvとして渡したいとします。argcとargvを使ってmainで次の引数を渡すにはどうしたらいいですか?

+0

'ivlpp_main()' 'int型ivlpp_mainとして宣言されている(int型のargc、char型** ARGV)':に似た何かを試してみてください? – MSalters

+0

はいivlpp_main()はintとして宣言されています。ivlpp_main(int argc、char ** argv); – imon

答えて

0

C argcはintであり、argvは引数のベクトルです。これが真であれば、その文字列をargvにだけ渡すことができます。

ただし、文字列全体が単一の引数か、メイン関数の複数の引数を含むかどうかを判断する必要があります。これについてコメントしてください。その場合の回答を追加します。

編集:次に、それぞれを配列に追加する必要があります。

static void build_preprocess_command_and_run(int e_flag) 
{ 
    char **argv; 
    int argc, arg; 

    argc = 7; /* you have 6 args maximum plus one NULL at the end */ 
    argv = calloc(argc, sizeof(argv[0])); 
    arg = 0; 

    snprintf(argv[arg++], strlen(pbase) + 2 + strlen("ivlpp"), "%s%ccivlpp", pbase, sep); 

    if (verbose_flag) { 
    argv[arg++] = "-v"; 
    } 

    if (!e_flag) { 
    argv[arg++] = "-L"; 
    } 

    snprintf(argv[arg++], strlen(defines_path) + 1, "-F\"%s\"", defines_path); 
    snprintf(argv[arg++], strlen(defines_path) + 1, "-f\"%s\"", source_path); 
    snprintf(argv[arg++], strlen(defines_path) + 1, "-f\"%s\"", compiled_defines_path); 

    ivlpp_main(argc, argv); 
} 
+0

単一の文字列ではない複数の引数があります。 – imon

+0

完了しました。今、それは仕事にする必要があります –

+0

多くのおかげです。 – imon

関連する問題