C 主函数 const char*[] 与 char*[]

bra*_*urm 4 c command-line-arguments

我不明白两者之间有什么区别

int main(int argc, char* argv[]){;}
Run Code Online (Sandbox Code Playgroud)

int main(int argc, const char* argv[]){;}
Run Code Online (Sandbox Code Playgroud)

是。

我知道 achar*[]和之间的区别const char*[],但我想知道为什么人们想使用后者。

是否存在想要更改命令行参数的用例?添加的最佳实践是什么const

Eri*_*hil 6

int main(int argc, char *argv[])main是根据 C 标准声明托管环境的定义方式,根据 C 2018 5.1.2.2.1 1。int main(int argc, const char *argv[])不是。

在适用的地方使用它const来表明所指向的对象不会改变是很好的,但必须使用得当。类型char *[]const char *[]不兼容,并且不能与参数声明或参数类型互换。如果main使用 声明const char *argv[],则该行为不是由 C 标准定义的。

至于为什么规定的声明是char *argv[]而不是const char *argv[],部分是历史原因,部分是因为一些处理命令行参数的技术会就地修改参数。

  • @marco-a:“argv”和它指向的指针以及它们指向的字符串都不是不可变的。C 2018 5.1.2.2.1 2 说“参数‘argc’和‘argv’以及‘argv’数组指向的字符串应可由程序修改,并在程序启动和程序终止之间保留它们最后存储的值”。 (4认同)