2013-05-07 35 views
9

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

int 
main (int argc, char **argv){ 

    while (*argv) 
     printf ("%s\n", *argv++); 

    return 0; 
} 
+0

“* argv的[0]应为指针NTMBS的初始字符表示用于调用该程序或名称‘’。的argc的值应为正数。的argv的值[的argc]应0. *“ – Maroun 2013-05-07 12:26:28

回答

9

C标准5.1.2.2.1/2秒标记明确地说

的argv [的argc]应为空指针。

C++标准3.6.1/2也明确地说

的argv的值[的argc]应为0。

+0

是的,但是这是什么动机? – Thilo 2013-05-07 12:28:31

+0

为什么天空是蓝色的?它是一个以null结尾的'char'数组的空终止数组。我猜想一致性和促进OP写的代码。 – rubenvb 2013-05-07 12:29:33

+0

看,你可以做到。 :-)听起来对我来说是一个很好的答案。 – Thilo 2013-05-07 12:32:48

5

标准(C99 5.1.2.2.1p2)的任务是:

如果声明了,主函数的参数应服从 以下约束:

- argc的值应该是非负的。

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

...

这样做的原因是提供的参数列表的最后一个冗余的检查,通常的做法的基础上(参考:理由的ANSI C编程语言(1990年),2.1.2.2)。