2014-12-24 126 views
0

大家好我是系统编程的新手,请介意我,如果我的疑问很模糊。系统调用execvp没有执行

我实际上是在关注一本名为Linux系统编程的书,并且在execvp()系统调用中有一个疑问。正如我在本机上试用过的一本书示例中给出的,这里是以下示例。

#include<unistd.h> 

//int ret; 
int main(){ 

const char *args[] = { "vi", "/home/kidd/hooks.txt", NULL }; 
int ret; 
ret = execv ("/bin/vi", args); 
if (ret == −1) 
perror ("execvp"); 

} 

而且我收到foolwing错误:

error: invalid conversion from ‘const char**’ to ‘char* const*’ [-fpermissive] 

我给一个const char数组名,这显然为const char **。

为什么给这个错误?**

回答

0

args数组不应该有类型为const char *,它应该只是是char *(以同样的方式,argv的参数主要是只是一个char * )。所以,你的代码应该是这样的:

#include <unistd.h> 

int main() { 
char *args[] = { "vi", "/home/kidd/hooks.txt", NULL }; 
int ret; 
ret = execv ("/bin/vi", args); 
if (ret == -1) 
    perror ("execvp"); 
} 
+0

但我因此未理解逻辑。参数类型应为const char **怎么字符串文字内影响type.I'm一个C++程序员,如果错误介意我。 –

+0

你想要的类型是const * char *。由于文字的类型为const char *,因此声明数组类型为const char *,您可以输入const char **。所以相反,你让数组成为char *来获得类型const * char *。 http://linux.die.net/man/3/execvp http://stackoverflow.com/questions/12517983/c-what-is-the-datatype-of-string-literal – imareaver