2010-07-28 60 views
0

我在VS2005中運行C++程序,在項目屬性 - >調試 - >命令行參數中只設置了一個參數,例如命名爲profile1.dll在Visual Studio C++中讀取程序參數的問題

這裏的代碼片斷

cout<<"number of arguments:" << argc<<endl; 

for (int i=0; i<argc; i++) 
     cout << "argument " << i << ": " << argv[i] << endl; 

在輸出我得到

number of arguments:2 
argument 0: c 
argument 1: p 

不知道爲什麼它不打印參數的名稱?

+1

我的猜測是你的主要方法有argv有char *類型而不是char **。不知道你的主要方法decl肯定不知道。 – 2010-07-28 11:39:24

+0

我認爲鮑勃的答案是唯一的答案。您正在使用UNICODE,0會阻止您打印整個字符串。使用UNICODE的函數來打印字符串。 – 2010-07-28 11:54:42

回答

5

你的exe的名字是以C開頭的嗎?如果你期望一個字符串,並且你只能得到一個字符,通常是因爲你已經發現UTF-16 Unicode的西方字母有效地在交替的ANSI字符之間放置一個0。你在編譯Unicode嗎?

+0

我正在使用Unicode。 我將其更改爲多字節,但輸出仍然相同 – 2010-07-28 11:45:13

+0

@Kobac:使用Unicode時,應使用std :: wcout而不是std :: cout。 – Sjoerd 2010-07-28 11:52:19

+0

+1 - 趕上! – 2010-07-28 13:07:50

0

你可以把你的main功能的原型?你在做什麼顯然很好。

確保你的主要的函數原型爲類似於:

int main(int argc, char **argv) 

希望它能幫助。

+0

'int _tmain(int argc,char * argv [])// _ TCHAR *' 所以默認它是_TCHAR *爲argv [],但如果是這樣,它打印一個整數,所以我將它改爲char * – 2010-07-28 11:41:17

+1

@Kobac:將其更改回TCHAR,並使用std :: wcout而不是std :: cout – Sjoerd 2010-07-28 11:53:16

+0

現在我看到發生了什麼。您正在使用UNICODE和0阻止您打印整個字符串。檢查鮑勃的答案。 – 2010-07-28 11:53:17

3

argv[0]是您程序的名稱。 argv[1]是第一個參數。這聽起來像你宣佈在main()中的相關參數爲char* argv而不是char *argv[]char **argv

+0

但是,OP已經在迴應巴勃羅的回答時說過,他已經宣佈它爲char * argv []。有些事情不對。 – 2010-07-28 11:58:09

+1

@kobac:謝謝你接受我的回答,但正如指出的那樣,這不是你問題的原因。你能接受@Bob Moore的回答嗎? – Vicky 2010-07-28 12:44:35

+0

年的fairplay! :) – 2010-07-28 13:48:41

1

離開TCHAR吧,沒關係。

如果你使用Unicode編譯,使用wcout輸出:

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    for (int i=0; i<argc; i++) 
    wcout << "argument " << i << ": " << argv[i] << endl; 

    return 0; 
} 

否則編譯不Unicode和您的代碼將只是工作原樣(並且將不使用Unicode參數工作:O)

你可以在「項目屬性/常規/字符集」中找到設置