【发布时间】:2011-04-15 22:14:27
【问题描述】:
我的教授和几个学生正在争论 argv 是否为空终止。我的朋友写了一个小程序,它打印出null,但另一个孩子说他可能只是在读空白记忆。有人可以解决这个讨论吗?
【问题讨论】:
我的教授和几个学生正在争论 argv 是否为空终止。我的朋友写了一个小程序,它打印出null,但另一个孩子说他可能只是在读空白记忆。有人可以解决这个讨论吗?
【问题讨论】:
来自标准:
5.1.2.2.1 程序启动
...
-- argv[argc] 应该是一个空指针。
所以,是的; argv 为空终止
【讨论】:
argv 数组来计算参数,从而使编写一些程序变得更容易。
if(argc <= 3) /* not enough arguments */我觉得比if(sizeof(argv) / sizeof(argv[0]) <= 3)好
argv 是一个指针; argv[0] 也是一个指针。很可能sizeof(argv) / sizeof(argv[0]) 评估为1 ...无论如何,您的想法与我所说的相似(不必走到argv 数组)。
根据标准,“argv[argc] 应为空指针”(5.1.2.2.1)。
【讨论】:
exec 的手册页自 1979 年 (plan9.bell-labs.com/7thEdMan/v7vol1.pdf) 显示,这比标准早了很多,并且包含一个可能的提示,说明为什么会这样:“Argv可以直接在另一个 execv 中使用,因为 argv[argc] 为 0。"