怎么输出map(如何输出_tmain中的argv[] 悲情土仔一生 C++博客)
如何输出_tmain中的argv[]
作者:Tuuzed(土仔)
版权声明:可以任意转载 ,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 。
http://www.cppblog.com/tuuzed/archive/2008/02/23/43153.html使用过VS2005中VC++的大侠们应该对_tmain不陌生 。是的 ,_tmain是Microsoft自己弄出来的东西 ,关于它的问题网上有一堆(GOOGLE Search) 。今天想用VS2005中的VC++做一个WIN32控制台(console)下的应用程序 ,向导程序默认给出的是以下内容:
argv[])
4{
56return0;
78}9想当然 ,很好 ,很容易 。试试列出命令的参数:
argv[])
6{
7cout<<argc<<endl;
8cout<<argv[0]<<endl;
9return0;
10}11运行结果竟然是这样的:
D:\MyData\CSharp\Projects\test\Debug>test
1
003A5210
“003A5210 ”是什么值?一开始就弄不懂了 。
如果把_tmain函数变为:
argv[])
2{
3cout<<argc<<endl;
4cout<<argv[0]<<endl;
5return0;
6}7运行结果正常:
D:\MyData\CSharp\Projects\test\Debug>test
1
d:\MyData\CSharp\Projects\test\Debug\test.exe
头大了 。最后分别对两个函数运用断点中的反汇编看看 ,发现原来**argv竟然是wchar_t** ,再翻弄了一下_TCHAR的声明:
typedef wchar_t_TCHAR;
一切明白了 。要输出这个_TCHAR只能用cout的另一个版本:wcout 。
为什么呢?原因很简单 ,因为他们都带了一个“w ”在前面啊!能正确输出_TCHAR* argv[]的版本:
std;
45int_tmain(intargc,_TCHAR*argv[])
6{
7wcout<<argc<<endl;
8wcout<<argv[0]<<endl;
9return0;
10}11给出一个网上对
_tmain的一个有用的定义:
对于ANSI版本 ,"_tWinMain"就是"WinMain";对于UINCODE版本 ,"_tWinMain"就是"wWinMain" 。(比如这样的定义:)
#ifdef_UNICODE
2#define_tmainwmain3#define_tWinMainwWinMain4#else5#define_tmainmain6#define_tWinMainWinMain7#endif所以 ,_tmain()不过是unicode版本的的main()
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!