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

时间:2017-03-21 16:29:06

标签: c command-line-arguments argv

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

答案 0 :(得分:2)

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

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

  

如果声明它们,主函数的参数应遵循以下内容   约束:

     
      
  • ...

  •   
  • 如果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,等等。