被问到这个问题,基本上提出了argc ......没有实际拥有argc
如果你给定的argv,我理解基本上是每个输入参数的相关char数组的指针数组,
我如何实际计算argv中指针的数量?
答案 0 :(得分:8)
C标准规定:
argv[argc] shall be a null pointer.
因此,您始终可以通过测试0
来检测结尾。
答案 1 :(得分:2)
一般情况下,除非数组被0
或NULL
之类的“停止”值明确终止,否则您不能这样做。这就是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]