我读了一篇文章(忘记了网址),其中说argv[argc]
是一个NULL
指针(包含\0
)。要检查是否真的我写了这段代码,是的,它存在。我不明白的是,为什么操作系统在NULL
包含此argv[argc]
指针。它对其他东西也有用吗?
int
main (int argc, char **argv){
while (*argv)
printf ("%s\n", *argv++);
return 0;
}
答案 0 :(得分:10)
C标准5.1.2.2.1/2
第二个标记明确说明
argv [argc]应为空指针。
C ++标准3.6.1/2
也明确说明
argv [argc]的值应为0.
答案 1 :(得分:5)
标准(C99 5.1.2.2.1p2)规定:
如果声明它们,则应遵守main函数的参数 以下约束:
- argc的值应为非负值。
- argv [argc]应为空指针。
...
这样做的基本原理是在通用实践的基础上为参数列表的末尾提供冗余检查(参考: ANSI C编程语言的基本原理(1990),2.1。 2.2)。