2011-11-11 42 views

回答

8

C標準規定:

argv[argc] shall be a null pointer. 

所以,你可以通過測試0隨時檢測結束。

2

一般來說,除非數組特別終止某個「停止」值,如0NULL,否則不能。這就是argc存在的原因。指針本身不具有具有長度/數量/與它們相關聯的元素的數量。

當傳遞指向數組的指針時,必須傳遞一些元素或顯式地分配一個太多的元素,並在數組的末尾添加一個「null」元素。

+2

錯誤,'argv'保證'0'作爲最後一個元素 –

+0

@JensGustedt請再次閱讀。我*特別*說「一般」,並在所有數組*的背景下回答,而不是專門用於'argv'。 – meagar

+0

@meegar,恩,好吧,那麼你的第二個短語沒有太多的上下文來提及。 'argc'爲了方便(或傳統)而存在,並且嚴格來說不是必需的。 –

1

你不能。陣列結束後會出現隨機性,無法準確區分真實數據的隨機性。

+0

錯誤,'argv'保證有'0'作爲最後一個元素 –

+0

好點。當我領先時,我應該停止。 – drdwilcox

0

您必須使用argc,它在提供argv時始終存在。 argv中的最後字符指針在argv [argc-1]

+1

錯誤,'argv'保證有'0'作爲最後一個元素 –

2

我不同意這裏的一些人。

argv本身是空終止的。例如,如果您鍵入

$./foobar hello strawberry 

你會得到

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

換句話說,這樣的代碼將工作:

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

試試看!

+0

你可能對它的結論是每個Jens註釋都是NULL,但是假設它會是NULL而不知道標準是個壞主意。 –

+0

[app.execve.01.02](http://linuxtesting.org/results/lsb_reqs?showreqs=execve)「argv:應用程序應確保該數組的最後一個成員是空指針。」 –

+0

你走了,現在你可以使用它不受懲罰 –

相關問題