为什么argv的参数execvp不是const的?(Why is argv parameter to

2019-07-29 06:23发布

execvp被这样定义:

int execvp(const char *file, char *const argv[]);

这就排除了代码像这样被使用:

const char* argv[] = {"/bin/my", "command", "here", NULL};
execvp(argv[0], argv);

这是一个意外遗漏? 它是安全的const_cast解决此问题? 或者做一些execvp实现实际上是在内存乱写?

Answer 1:

该POSIX规范说( http://pubs.opengroup.org/onlinepubs/009604499/functions/exec.html ):

所述argv[]envp[]指针和字符串数组到这些阵列点不得通过调用修改以exec函数之一,除非更换处理图像的结果。

我认为缺失(或放错地方) const仅仅是一个历史的怪胎。



Answer 2:

我遇到了这个同样的情况。 因为execvp()具有char *const作为第二个参数,这意味着它接受一个常量指针为char。 因此,如果你传递一个指针字符它就能指针字符转换为一个常量指针为char。 如此,而不是它声明

const char* argv[] = {"/bin/my", "command", "here", NULL};

尝试

char* argv[] = {"/bin/my", "command", "here", NULL};

它将接受argv[]没有问题。



文章来源: Why is argv parameter to execvp not const?
标签: c libc execvp