什么是char*const argv []?

Kao*_*oet 12 c++ pointers const exec char

我看到的时候正在研究linux C++编程

int execve(const char *path,
           char *const argv[],
           char *const envp[]);
Run Code Online (Sandbox Code Playgroud)

我不明白是什么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[]

Mar*_*ork 31

它是char的const指针数组还是const char的指针数组?

从右到左读取类型:
const总是绑定到左边(除非它在左边)

char *const argv[]

                ^^ Array of
      ^^^^^        const
     ^             pointer to
^^^^               char
Run Code Online (Sandbox Code Playgroud)

"const pointer"char 的数组

因此无法修改数组中的指针.
但他们指出的可以修改.

注意:正如史蒂夫在下面指出的那样.因为这被用作参数.它实际上衰减为"指向"const pointer"char 的指针"或"char*const*".

我现在有一个vector <string>,如何将它转换为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]);
}
Run Code Online (Sandbox Code Playgroud)

  • 确实`char*const argv []`是一个数组类型,但在这个上下文中,一个函数参数,类型不是`char*const argv []`,它是`char*const*argv`. (3认同)