被問到這個問題,基本上提出argc ...沒有實際argc如何判斷何時到達C數組的末尾? (特別是argv)
如果你給的argv,這正如我理解的基本上是指向每個相關字符數組的指針數組輸入的參數,
我該怎麼去計算argv中的指針數呢?
被問到這個問題,基本上提出argc ...沒有實際argc如何判斷何時到達C數組的末尾? (特別是argv)
如果你給的argv,這正如我理解的基本上是指向每個相關字符數組的指針數組輸入的參數,
我該怎麼去計算argv中的指針數呢?
C標準規定:
argv[argc] shall be a null pointer.
所以,你可以通過測試0
隨時檢測結束。
一般來說,除非數組特別終止某個「停止」值,如0
或NULL
,否則不能。這就是argc
存在的原因。指針本身不具有具有長度/數量/與它們相關聯的元素的數量。
當傳遞指向數組的指針時,必須傳遞一些元素或顯式地分配一個太多的元素,並在數組的末尾添加一個「null」元素。
您必須使用argc,它在提供argv時始終存在。 argv中的最後字符指針在argv [argc-1]
錯誤,'argv'保證有'0'作爲最後一個元素 –
我不同意這裏的一些人。
argv本身是空終止的。例如,如果您鍵入
$./foobar hello strawberry
你會得到
argv = [%p] [%p] [%p] [NULL]
| | |
| | \_"strawberry\0"
| |
| \_"hello\0"
|
\_"./foobar\0"
換句話說,這樣的代碼將工作:
while (*argv) {
printf("%s\n", *argv);
argv++;
}
試試看!
你可能對它的結論是每個Jens註釋都是NULL,但是假設它會是NULL而不知道標準是個壞主意。 –
[app.execve.01.02](http://linuxtesting.org/results/lsb_reqs?showreqs=execve)「argv:應用程序應確保該數組的最後一個成員是空指針。」 –
你走了,現在你可以使用它不受懲罰 –
錯誤,'argv'保證'0'作爲最後一個元素 –
@JensGustedt請再次閱讀。我*特別*說「一般」,並在所有數組*的背景下回答,而不是專門用於'argv'。 – meagar
@meegar,恩,好吧,那麼你的第二個短語沒有太多的上下文來提及。 'argc'爲了方便(或傳統)而存在,並且嚴格來說不是必需的。 –