gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:08:56 24 4
gpt4 key购买 nike

为什么 execv*() 函数族的 argv 参数是 char * const []execl* () 系列的 arg0...n args 是 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[]);

最佳答案

我找不到权威的答案,但我怀疑这两个调用签名的不同之处在于它们的创建方式和使用方式。

execl*() 的情况下,您的函数完全有可能被传递给您正在传递的 const char*。如果 execl*() 的签名不是 const char*,那么您将收到编译器警告。

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

也许更熟悉规范的人可以澄清我可能哪里出错了。

关于c - 为什么 execv*() 参数与 execl*() 不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28222141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com