3

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

如果您给定的 argv,据我所知,它本质上是指向每个输入参数的相关 char 数组的指针数组,

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

4

5 回答 5

8

C标准规定:

argv[argc] shall be a null pointer.

因此,您始终可以通过测试0.

于 2011-11-11T17:06:16.120 回答
2

一般来说,你不能,除非数组被一​​些“停止”值特别终止,比如0or NULL。这就是argc存在的理由。指针本身没有与之关联的元素的长度/计数/数量。

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

于 2011-11-11T16:39:48.107 回答
2

我不同意这里的一些人。

argv 本身是空终止的。例如,如果您键入

$./foobar hello strawberry

你会得到

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

换句话说,这种代码可以工作:

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

试试看!

于 2011-11-11T16:54:44.860 回答
1

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

于 2011-11-11T16:40:19.167 回答
0

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

于 2011-11-11T16:45:29.803 回答