c++ - 什么是 char* const argv[]?

标签 c++ pointers char constants exec

我在学习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/

相关文章:

java - 我不断收到字符串越界错误,有人可以帮助修复我的代码吗?

C++,我可以在编译时静态初始化 std::map 吗?

C++:删除与免费和性能

c++ - 如果我将一个成员存储为一个对象,我会在构造过程中产生一个对象拷贝吗?

C++ extern const char* 没有按预期工作

SVN 255 字符问题

c++ - 如何让 RecursiveASTVisitor 中止当前子树

c++ - x86 放松排序性能?

c++ - 需要指针地址的 shared_ptr 的自定义删除器

c - 全局指针的段错误