2017-08-01 20 views
1

を通じて引数を渡す:C EXECV私はこのコードを理解しようとしている機能

char * pl[] = {"test.sh", NULL}; 
execv("./test.sh", pl); 

これは交流プログラムから私のスクリプトを実行しますが、これはしません:

execv("./test.sh", ["test.sh", NULL]); 

これが実現エラーメッセージ:

error: expected expression before '[' token

これはどちらか動作しません:

を210
execv("./test.sh", (char *) ["test.sh", NULL]); 

同じ正確なエラー...

ここで何が起こっているの?

私は明らかにchar * []宣言の種類を誤解しています。配列をキャストできますか?これを1行のコードにすることはできますか?

私は{}を理解していませんが、このコードスニペットの最終目標である関数にこのビットを渡すにはどうすればよいですか?

+0

CはPythonではなく、Perl、C++、Java、C#、または...他の言語の表記をCコードで試してみると、動作しないか、動作が異なると予想されます。言語とその構文を理解するには、Cの本を読む必要があります。 –

+1

@Jonathan Leffler私はC以外のプログラミング言語については一度も言及していませんでした。execvは 'char * const argv []'を望んでいますが、これをexecvの引数にどのように使用するかを尋ねています。 "本を読む"はこの質問に答えません。私はANSI Cを含むいくつかを読んだが、私は全標準を覚えていなかった... Mea culpa – posop

+0

引数のリストの前後に大括弧を使用した表記は、C言語でしかコーディングしない人が思い付くことではない。私が言及した言語の中にはそのような表記法をサポートしているものがあるので、私はあなたが既に他の少なくとも1つの言語を知っており、その言語はPascal、Algol、Fotran、COBOL、Basic、Modula-3 ...ではないと推論しました。 –

答えて

2

あなたは文字通りの化合物を使用することができます。

execv("./test.sh", (char*[]){"test.sh", NULL}); 

これは、後にのみC99とのためです。

関連する問題