2017-08-01 62 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和更高版本。