【发布时间】:2015-11-07 02:34:28
【问题描述】:
我一直认为argc 必须用来标记argv 的结束,但我刚刚了解到argv[argc] == NULL 的定义。我认为argc 是完全多余的吗?如果是这样,我一直认为C 以效率的名义消除了冗余。我的假设是错误的还是背后有历史原因?如果原因是历史性的,您能详细说明吗?
【问题讨论】:
-
NULL不能是argv的元素吗?也就是说,在数组的实际结束之前。 -
@AndrasDeak,我不这么认为。
argv的元素可以是一个空字符串,即一个只有一个元素的数组,0-byte。 -
是的,它是多余的。原因是“历史原因”
-
加上
if (argc < 3) { printf("error message"); return 1; }无需先循环argv列表的能力。更不用说可能基于参数数量做出的各种其他选择(从命令行参数读取文件与读取标准输入等) -
@Nighthawk441 您可以将其称为
execname 'arg1' 'arg2' '' 'arg4',在这种情况下argv[3]是一个空字符串。而且,正如@Jens 所说,那不是NULL。