为什么argv [argc]指向NULL的指针?

问题描述 投票:0回答:4

在C标准ISO / IEC 9899:2018(C18)中,第§5.1.2.2.1-“程序启动”中写道:

2-如果声明了它们,则主函数的参数应遵循以下约束:

argv [argc]应为空指针。


我的问题是:

  • 为什么char *argv[argc] / char **argv应该是/是指向NULL的指针?

这对我来说毫无意义。 argv[]是指向char的指针的数组。 argv是指向char的指针数组的指针。即使该调用没有给出任何标志,该指针也不应转向指向NULL的指针。

char* argv[]不是指向char的指针的数组,还是char **argv是指向char的指针的嵌套指针? charchar**)的嵌套指针如何成为NULL的指针?


[我已经阅读了argv[argc] ==?的答案,其中引用了上述标准中的短语作为答案,还质疑了@pmg´s answer,后者给了我答案:

与所用名称无关,由c规范char * argv [argc]声明了一个名为argv的数组,该数组能够保存指向char的argc指针。当传递给函数时,数组将转换为指向其第一个元素的指针(因此,指向char的指针[这就是为什么通常看到main(int argc,char ** argv)])丢失有关大小的信息的原因(char * a [10]有10个元素; char ** a是一个指针---如果指针指向一个数组,则无法知道底层数组有多少个元素)。

但是遗憾的是,尽管付出了辛勤的努力,但我仍然不明白为什么指向charchar**)的指针(嵌套指针)的指针变成了NULL的指针。

Is argv[argc] equal to NULL Pointer的答案也没有回答为什么

它应该是指向NULL的指针,只有是指向NULL的指针,同时引用上述标准的说明。] >

提前感谢。

在C标准ISO / IEC 9899:2018(C18)中,第§5.1.2.2.1-“程序启动”中写道:2-如果声明了它们,则主要功能的参数应遵循以下约束: — ...

c pointers null argv argc
4个回答
3
投票

发件人

国际标准程序设计语言规范C修订5.102003年4月


3
投票

完成的原因有两个:

  1. 为了提高安全性:如果尝试访问[argc - 1]以外的元素,则会崩溃,而不是将垃圾解释为额外的参数并对其进行不良处理,例如将其视为文件名并写入文件。


2
投票

什么意思

— argv [argc]应为空指针。


0
投票

IMO是为了方便while(*argv != NULL) ....

© www.soinside.com 2019 - 2024. All rights reserved.