2017-08-01 59 views
1

我試圖理解這段代碼execv傳遞參數:c到功能

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

這將執行從交流程序我的劇本,但這不會:

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

這提供了一個錯誤信息:

error: expected expression before '[' token

這不起作用或者:

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

完全相同的錯誤...

這到底是怎麼回事?

我顯然誤解了char * []聲明類型。我應該能夠投射陣列嗎?我可以把這一行代碼?

我不理解的{},我怎麼會變成這樣有點傳遞給一個函數,它是此代碼段的最終目標?

+0

C不是Python的 - 或Perl或C++或Java或C#,或...如果你選擇嘗試在C代碼其他語言的符號,指望他們不工作,或者工作方式不同。你需要閱讀一本關於C的書來理解語言及其語法。 –

+1

@Jonathan萊弗勒我從來沒提過比C. execv其他任何編程語言想要一個'char * const的的argv []',我問如何在參數execv使用。 「讀一本書」並不回答這個問題。我已看過一些包括ANSI C.我沒記住但是整體水平......過失 – posop

+0

周圍使用的參數列表方括號中的符號是不是一個人誰只在C代碼會拿出。我提到的一些語言確實支持這種符號,所以我推斷您已經知道至少有一種其他語言,並且該語言不是Pascal,Algol,Fotran,COBOL,Basic,Modula-3,...。 –

回答

2

您可以使用文字的化合物:

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

這是C99和更高版本。