一开始,我写了这样的东西
char* argv[] = { "ls", "-al", ..., (char*)NULL };
execvp("ls", argv);
然而,GCC弹出了这个警告:"C++禁止将字符串常量转换为char*
。"
于是,我将我的代码改成了
const char* argv[] = { "ls", "-al", ..., (char*)NULL };
execvp("ls", argv);
结果,GCC 弹出这个错误:“从const char**
转换为char* const*
是无效的。”
于是,我修改了我的代码。
const char* argv[] = { "ls", "-al", ..., (char*)NULL };
execvp("ls", (char* const*)argv);
最终它可以正常工作,并且没有任何警告和错误,但我认为这有点繁琐,而且我在互联网上找不到类似的东西。
在C++中有更好的使用execvp
的方法吗?
(char*)0
应该是一个普通的0
,或者最好是nullptr
。至于你遇到的数组问题,我建议您阅读execvp
手册页。在那里,您会看到参数的类型,并可以定义该数组为该类型(开头加上一个const
)。 - Some programmer dudeexeclp
函数。execvp
函数不是可变参数函数。即使使用execlp
函数,最后一个“参数”也不应该显式地转换类型,最好使用nullptr
关键字而不是0
。 - Some programmer dudeexecl
。而且,将nullptr_t
传递给使用va_arg(arg, char*)
的可变参数函数是UB。类型不匹配。在C++中,nullptr
的目的是将其转换为目标类型的空指针,但C可变参数函数调用表达式没有目标类型。 - MSalters