繁体   English   中英

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

[英]result of passing argv variable to main in this format main( int argc, char const * 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之前就终止了。

由于提供的类型和预期的类型不匹配,因此会导致未定义的行为 ,因此这显然是违反约束的情况。

引用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可以通过定义为typedef名称来代替int ,或类型argv可以写为char ** argv ,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM