如何輸出_tmain中的argv[]
作者:Tuuzed(土仔) 版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明。http://m.shnenglu.com/tuuzed/archive/2008/02/23/43153.html 使用過(guò)VS2005中VC++的大俠們應(yīng)該對(duì)_tmain不陌生。是的,_tmain是Microsoft自己弄出來(lái)的東西,關(guān)于它的問(wèn)題網(wǎng)上有一堆(GOOGLE Search)。今天想用VS2005中的VC++做一個(gè)WIN32控制臺(tái)(console)下的應(yīng)用程序,向?qū)С绦蚰J(rèn)給出的是以下內(nèi)容: 1#include "stdafx.h"23int _tmain(int argc, _TCHAR* argv[])4{56 return 0;78}9 想當(dāng)然,很好,很容易。試試列出命令的參數(shù):
運(yùn)行結(jié)果竟然是這樣的:
D:\MyData\CSharp\Projects\test\Debug>test 1 003A5210
1
003A5210
“003A5210”是什么值?一開始就弄不懂了。
如果把_tmain函數(shù)變?yōu)椋?/span>
運(yùn)行結(jié)果正常:
D:\MyData\CSharp\Projects\test\Debug>test 1 d:\MyData\CSharp\Projects\test\Debug\test.exe
D:\MyData\CSharp\Projects\test\Debug>test
d:\MyData\CSharp\Projects\test\Debug\test.exe
頭大了。最后分別對(duì)兩個(gè)函數(shù)運(yùn)用斷點(diǎn)中的反匯編看看,發(fā)現(xiàn)原來(lái)**argv竟然是wchar_t**,再翻弄了一下_TCHAR的聲明:typedef wchar_t _TCHAR;一切明白了。要輸出這個(gè)_TCHAR只能用cout的另一個(gè)版本:wcout。為什么呢?原因很簡(jiǎn)單,因?yàn)樗麄兌紟Я艘粋€(gè)“w”在前面??!
能正確輸出_TCHAR* argv[]的版本:
給出一個(gè)網(wǎng)上對(duì)_tmain的一個(gè)有用的定義: 對(duì)于ANSI版本,"_tWinMain"就是"WinMain";對(duì)于UINCODE版本,"_tWinMain"就是"wWinMain"。
(比如這樣的定義:)
所以,_tmain()不過(guò)是unicode版本的的main()
Powered by: C++博客 Copyright © 土仔