为什么argv
函数系execv*()
个参数char * const []
execl*()
arg0...n
const char *
const char * const []
个 int execl(const char *path, const char *arg0, ... /*, (char *)0 */);
int execv(const char *path, char *const argv[]);
int execle(const char *path, const char *arg0, ... /*,
(char *)0, char *const envp[]*/);
int execve(const char *path, char *const argv[], char *const envp[]);
int execlp(const char *file, const char *arg0, ... /*, (char *)0 */);
int execvp(const char *file, char *const argv[]);
系列{{1}}这只是标准中的一个错误,它应该是{{1}}或者是否有理由在数组的情况下字符串是非const而在显式传递的参数情况下是const?
{{1}}
答案 0 :(得分:0)
我找不到权威的答案,但我怀疑这两个呼叫签名的不同取决于它们的创建方式和使用方式。
对于execl*()
,您的函数完全可以传递给您传递的const char*
。如果execl*()
的签名不是const char*
,那么您将收到编译器警告。
在execv*()
的情况下,因为它是一个可能由你构建的数组,所以维持字符串值的常量并不重要。但重要的是execv*()
不操纵指针 - 否则可能会修改最后一个元素,因此它不再正确指向NULL - 这是必需的。
也许某人对规范更加熟悉,以澄清我可能出错的地方。