我在学习linux C++编程的时候看到
int execve(const char *path,
char *const argv[],
char *const envp[]);
我不明白 char *const argv[]
是什么.我知道char *const foo
是一个指向 char 的 const 指针。和const char *foo
是一个指向 const char 的指针。但是 char *const argv[]
是什么? ?
是指向 char 的 const 指针数组还是指向 const char 的指针数组?
我有一个 vector<string>
现在,如何将其转换为 char *const argv[]
?
最佳答案
Is it an array of const pointers to char or an array of pointers to const char?
从右到左读取类型:
const 总是绑定(bind)到左边(除非它在最左边)
char *const argv[]
^^ Array of
^^^^^ const
^ pointer to
^^^^ char
“const 指针”
到 char 的数组
所以不能修改数组中的指针。
但他们指向的内容是可以修改的。
注意:正如史蒂夫在下面指出的那样。因为这被用作参数。它实际上衰减为“A pointer to “const pointer”
to char”或“char* const *”。
And I have a vector<string> now, how to convert it to char *const argv[]?
int execve(const char *path,
char *const argv[],
char *const envp[]);
int main()
{
std::vector<std::string> data; /// fill
std::vector<char*> argv;
std::vector<char*> envp;
for(std::vector<std::string>::iterator loop = data.begin(); loop != data.end(); ++loop)
{
argv.push_back(&(*loop)[0]);
}
// I also bet that argv and envp need to be NULL terminated
argv.push_back(NULL);
envp.push_back(NULL);
execve("MyAppName", &argv[0], &envp[0]);
}
关于c++ - 什么是 char* const argv[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7026350/