为什么execv *()参数与execl *()不一致?

时间:2015-01-29 18:40:52

标签: c exec standards argv

为什么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}}

1 个答案:

答案 0 :(得分:0)

我找不到权威的答案,但我怀疑这两个呼叫签名的不同取决于它们的创建方式和使用方式。

对于execl*(),您的函数完全可以传递给您传递的const char*。如果execl*()的签名不是const char*,那么您将收到编译器警告。

execv*()的情况下,因为它是一个可能由你构建的数组,所以维持字符串值的常量并不重要。但重要的是execv*()不操纵指针 - 否则可能会修改最后一个元素,因此它不再正确指向NULL - 这是必需的。

也许某人对规范更加熟悉,以澄清我可能出错的地方。