是argv 等于NULL指针

我读了一篇文章(忘记了URL),其中说argv[argc]是一个NULL指针(包含\0 )。 要检查它是否真的我写了这个代码,是的,它存在。 我不明白的是,为什么操作系统在argv[argc]包含这个NULL指针。 对其他东西也有用吗?

 int main (int argc, char **argv){ while (*argv) printf ("%s\n", *argv++); return 0; } 

C标准5.1.2.2.1/2第二标志明确表示

argv [argc]应该是一个空指针。

C ++标准3.6.1/2也明确表示

argv [argc]的值应为0。

标准(C99 5.1.2.2.1p2)规定:

如果声明了,主函数的参数应该遵守以下约束条件:

– argc的值应该是非负的。

– argv [argc]应该是一个空指针。

其基本原理是根据惯例(参考ANSI C编程语言理论(1990) ,2.1.2.2)为参数列表的末尾提供冗余检查。