首页 文章

以这种格式main传递argv变量到main的结果(int argc,char const * argv)

提问于
浏览
-2

我试图找出以这种格式将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 回答

  • 2

    它导致undefined behavior作为提供的类型,并且期望的类型不匹配,因此这是违反约束的明显情况 .

    引用 C11 ,章节章节§5.1.2.2.1/ p2,(强调我的)

    如果声明它们,main函数的参数应遵循以下约束:...如果argc的值大于零,则数组成员argv [0]到argv [argc-1]包含指向字符串,在程序启动之前由主机环境给出实现定义的值

    考虑到数组衰减属性,您可以重新编写 char * argv[] 作为 char **argv 注意,但是 char *[]char * 在任何方面都不兼容 .


    注意:

    引用 C11 ,章节§5.1.2.2.1,脚注10)

    因此,int可以替换为定义为int的typedef名称,或者argv的类型可以写为char ** argv,依此类推 .

相关问题