如何判断你何时到达C阵列的末尾? (特别是argv)

时间:2011-11-11 16:38:08

标签: c argv argc

被问到这个问题,基本上提出了argc ......没有实际拥有argc

如果你给定的argv,我理解基本上是每个输入参数的相关char数组的指针数组,

我如何实际计算argv中指针的数量?

5 个答案:

答案 0 :(得分:8)

C标准规定:

argv[argc] shall be a null pointer.

因此,您始终可以通过测试0来检测结尾。

答案 1 :(得分:2)

一般情况下,除非数组被0NULL之类的“停止”值明确终止,否则您不能这样做。这就是argc存在的原因。指针本身不具有与它们相关联的元素的长度/计数/数量。

当传递指向数组的指针时,您必须传入元素数量或显式分配一个太多的元素,并在数组的末尾添加一个“null”元素。

答案 2 :(得分:2)

我不同意这里的一些人。

argv本身为空终止。例如,如果键入

$./foobar hello strawberry

你会得到

argv = [%p]  [%p]  [%p]  [NULL]
        |     |     |    
        |     |      \_"strawberry\0"
        |     | 
        |      \_"hello\0"
        |    
         \_"./foobar\0"

换句话说,这种代码将起作用:

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

试一试,看看!

答案 3 :(得分:1)

你做不到。数组结束后存在随机性,无法准确区分随机性和实际数据。

答案 4 :(得分:0)

您必须使用argc,它在提供argv时始终存在。 argv中的最后一个char指针位于argv [argc-1]