2011-07-18 7 views
-1

これは元のコードなので、ivlpp_mainですべての引数をargcargvを使って渡したいと思います。このプロセスをステップごとに説明できますか?

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);  
} 

は、これは私のコードです

static void build_preprocess_command(int e_flag) 
{ 
    char arg0[] = "%s%civlpp"; 
    char arg1[] = "%s%s"; 
    char arg2[] = "-F\”%s\”"; 
    char arg3[] = "-f\”%s\”"; 
    char arg4[] = "-p\”%s\”"; 
    char arg5[] = "-v"; 
    char arg6[] = "-L"; 
    char **argv[] = { &arg0[0], &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0], &arg6[0], NULL }; 
    int argc = 7;//(int)(sizeof(argv)/sizeof(argv[0])) - 1; 
    ivlpp_main(argc,argv); 
} 
+0

を渡す必要があります私のコードが正しいかではないでしょうか? – imon

+0

'ivlpp_main'(どのように宣言されている)の署名は何ですか? –

+0

@imon:コンパイルを試しましたか?通常、簡単な経験則があります。コンパイラがそれを気に入らない場合は、おそらく間違いでしょう。これは対称的ではないことに注意してください。コンパイラがそれを受け入れるなら、それはまだ間違っているかもしれません。 –

答えて

0

私のコードは正しいですか? - IMON

それはすべきではない、

char *argv[] = { ... }; // single pointer array 
int argc = sizeof(argv)/sizeof(argv[0]); // to make it less error prone 

また、あなたが&argv

ivlpp_main(argc,&argv); // assuming ivlpp_main() is like main() 
+0

カウントおよびNULL終了でいいえ。 'main'に' argc'と 'argv'の意味を保持したい場合。 'argc'は実際の引数の数であり、' argv'は 'char *'の*配列*であり、すべての引数に終端の 'NULL'を加えたものです。最初の質問のセマンティクスは正しい。次に、配列の型が正しいかどうかを調べます。 –

関連する問題