默認情況下,_tmain
將Unicode字符串作爲參數,但cout
需要ANSI字符串。這就是爲什麼它只打印每個字符串的第一個字符。
如果你想使用Unicode _tmain
,你必須與TCHAR
和wcout
像這樣使用它:
int _tmain(int argc, TCHAR* argv[])
{
for (int c = 0; c < argc; c++)
{
wcout << argv[c] << " ";
}
return 0;
}
或者如果你樂於使用ANSI字符串,使用正常main
與char
和cout
像這樣:
int main(int argc, char* argv[])
{
for (int c = 0; c < argc; c++)
{
cout << argv[c] << " ";
}
return 0;
}
稍微詳細:TCHAR
和_tmain
可以是Unicode 或 ANSI,具體取決於編譯器設置。如果UNICODE被定義,這是新項目的默認值,他們會說Unicode。它的UNICODE沒有定義,他們說ANSI。所以理論上你可以編寫不需要在Unicode和ANSI版本之間改變的代碼 - 你可以在編譯時選擇你想要的代碼。
這個下降的位置是cout
(ANSI)和wcout
(Unicode)。沒有_tcout
或同等學歷。但你可以簡單地創建你自己的並使用它:
#if defined(UNICODE)
#define _tcout wcout
#else
#define _tcout cout
#endif
int _tmain(int argc, TCHAR* argv[])
{
for (int c = 0; c < argc; c++)
{
_tcout << argv[c] << " ";
}
return 0;
}
另外請注意,argv [0]是程序名稱,因此不是其中一個參數。這是一個可以讓未來文明在這個網頁上發生的懸念點。 – 2009-07-11 18:17:45