2014-12-24 125 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