2010-02-07 26 views

回答

2

這將是 垃圾 NULL

因此,在嘗試訪問命令行參數之前,應始終首先測試argc(參數計數)。

有關更多詳細信息,請參見this

+2

這個答案有點不對,因爲'argv [1]'不會包含垃圾,它會包含'NULL'。 – Omnifarious 2010-02-07 04:40:26

+0

@Omnifarious:更正。感謝您指點。 – missingfaktor 2010-02-07 05:29:05

+2

說「'argv [argc]'將會是'NULL'」會更準確。如果argc爲1(如果沒有參數傳遞給'託管環境'中的程序,但幾乎沒有保證,那麼'argv [1]'將會是'NULL'。當然,在這種情況下,'argv [2]'(OP詢問的)將是不確定的。 – 2010-02-07 05:55:27

-1

如果你是幸運的話會出現段錯誤,如果不是,則爲垃圾。

使用argv的唯一安全方法是將其視爲argc元素的數組。

for (int ii = 0; ii < argc; ++ii) 
{ 
    // safe to use argv[ii]; 
    cout << argv[ii]; 
} 

int ix = somevalue; 
if (ix >= 0 && ix < argc) 
{ 
    // safe to use argv[ix]; 
} 

給傑瑞的注意事項。段錯誤是在大多數體系結構上取消引用NULL時所得到的結果。

7

你已經得到了很多不正確的答案。在命令行上沒有輸入任何內容,argv[0]仍然通常會包含程序的名稱,因此argc將爲1. argv[argc]將包含空指針(始終在每個符合C或C++的實現上)。在C標準中,該要求位於§5.1.2.1.1/ 2的第二個項目符號中。在C++標準中它是在§3.6.1/ 2。

+0

我糾正了。感謝您的標準參考。 – 2010-02-07 04:38:34

+0

這是一個很好的細節。但其他答案不是'不正確的'。如果你去引用argv [1],你會得到垃圾或段錯誤,值被認爲是null的事實是有點旁邊的。說arg [1]'包含'垃圾,而不是說argv [0]'包含'程序名稱是正確的。 – 2010-02-07 05:57:06