我正在尝试编写一个函数来解析命令行参数。这是函数声明:
void parse(int, char const **);
以防万一,我也尝试过(const char)**
, const char **
, and cchar **
用一个typedef const char cchar
。然而,如果我通过一个,所有这些(正如预期的,因为它们应该都是相同的)都会导致错误char **
进入函数,如:
void main(int argc, char **argv) {
parse(argc, argv);
我从 GNU 编译器得到的错误是error: invalid conversion from 'char**' to 'const char**'
来自 Clang 的一个是candidate function not viable: no known conversion from 'char **' to 'const char **' for 2nd argument
.
我见过这样的解决方案,建议将指针声明为指向 char 的 const 指针(const char * const *
),但我不希望任何一个指针都是 const,因为我希望能够修改该指针,以便我可以使用迭代参数for(; **argv; ++*argv)
。如何声明“指向 const char 的非常量指针的非常量指针”?
该函数应声明为:
void parse(int, char const * const *);
In C++, char **
可以隐式添加const
在所有指针深度,所以你可以将其称为parse(argc, argv)
.
In C, const
只能在第一个指针深度处添加(这是该语言的设计缺陷)。这是一个专用线程 https://stackoverflow.com/q/35319842/841108。所以你必须将该函数调用为:parse(argc, (char const * const *)argv);
很遗憾。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)