我试图找出以这种格式将argv变量传递给main的结果 . main(int argc,char const * argv) .
我知道使用它的正确方法是main(int argc,char const ** argv)或main(int argc,char const * argv []) .
这是我的代码片段,
#include <stdio.h>
int
main( int argc, char const * argv ) {
for( int i = 0; i < argc; ++i ) {
printf("%s\n", argv[i]);
}
}
这是输出,
$ ./a.exe .. $ ./a.exe 1 2 .... $ . / a.exe 1 2 2 ...
它是从任何argv点获取的吗?为什么它甚至在达到argc之前终止 .
1 回答
它导致undefined behavior作为提供的类型,并且期望的类型不匹配,因此这是违反约束的明显情况 .
引用
C11
,章节章节§5.1.2.2.1/ p2,(强调我的)考虑到数组衰减属性,您可以重新编写
char * argv[]
作为char **argv
注意,但是char *[]
和char *
在任何方面都不兼容 .注意:
引用
C11
,章节§5.1.2.2.1,脚注10)