![](/img/trans.png)
[英]int main(int argc, const char * argv[]) AND file input
[英]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.