当在C或C++应用程序中传递参数为main()时,argv[0]会始终是可执行文件的名称吗?或者这只是一个常见的惯例,并不能保证main()%都是真的?

推荐答案

猜测(甚至是经过教育的猜测)很有趣,但您确实需要查看标准文档才能确定.例如,ISO C11规定(我的重点):

如果argc的值大于零,则argv[0] represents指向的字符串为程序名;如果主机环境无法提供程序名,则argv[0][0]应为空字符.

所以不,如果程序名是available.,它只是程序名,它是"represents"程序名,不一定是is程序名.之前的章节说明:

如果argc的值大于零,则数组成员argv[0]argv[argc-1](含)应包含指向字符串的指针,这些字符串在程序启动之前由主机环境给定实现定义的值.

这与以前的标准C99没有什么不同,这意味着即使是这values个也不受该标准的规定--它完全取决于实现.

这意味着,如果主机环境doesn't提供程序名,则该程序名可以为空;如果主机环境does提供其他任何内容,则该程序名可以为空,前提是"其他任何内容"以某种方式表示该程序名.在我更具虐待狂的时刻,我会考虑把它转换成斯瓦希里语,通过替换密码运行它,然后将它存储在反向字节顺序:-).

然而,实现定义的does在ISO标准中具有特定的含义-实现必须记录其如何工作.因此,即使是UNIX(它可以使用exec系列调用将其喜欢的任何内容放入argv[0]),也必须(并且确实)对其进行记录.

C++相关问答推荐

如何在C中通过转换为char * 来访问float的字节表示?

C strlen on char array

使用SWI—Prolog的qsave_program生成二进制文件有什么好处?'

是否定义了数组指针类型转换为指针类型?""""

如何在C宏中确定Windows主目录?

ESP32在vTaskDelay上崩溃

&;(str[i])和(&;str)[i]有什么区别?

从TCP连接启动UDP(C套接字)

在编写代码时,Clion比vscode有更多的问题指示器

类型定义 struct 与简单的类型定义 struct

C语言中MPI发送接收字符串时出现的分段错误

将回调/基于事件的C API转换为非回调API

CS50判断灯泡运动的问题,判断时多出一个灯泡,但不在终端上

在C程序中使用Beaglebone Black UART的问题

从CentOS 7到Raspberry PI 2B的交叉编译-无法让LIBC和System Include标头一起工作

为什么我的半数组测试和奇数组测试不起作用?(我使用Assert进行调试)

正在try 理解C++中的`正在释放的指针未被分配‘错误

用C++初始化局部数组变量

UpDown控制与预期相反

使用复合文字数组初始化的指针数组