如何输出_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)下的应用程序,向导程序默认给出的是以下内容:

 

1 #include  " stdafx.h "
2
3 int  _tmain( int  argc, _TCHAR *  argv[])
4 {
5
6    return 0;
7
8}

9

 

想当然,很好,很容易。试试列出命令的参数:

 1 #include  " stdafx.h "
 2
 3 using   namespace  std;  // 必须在stdafx.h增加#include <iostream>
 4
 5 int  _tmain( int  argc, _TCHAR *  argv[])
 6 {
 7    cout << argc <<endl;
 8    cout << argv[0<<endl;
 9    return 0;
10}

11

 

运行结果竟然是这样的:

D:\MyData\CSharp\Projects\test\Debug>test

1

003A5210

003A5210”是什么值?一开始就弄不懂了。

如果把_tmain函数变为:运行结果正常:

1 int  main( int  argc,  char *  argv[])
2 {
3    cout << argc <<endl;
4    cout << argv[0<<endl;
5    return 0;
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[]的版本:

 1 #include  " stdafx.h "
 2
 3 using   namespace  std;
 4
 5 int  _tmain( int  argc, _TCHAR *  argv[])
 6 {
 7    wcout << argc <<endl;
 8    wcout << argv[0<<endl;
 9    return 0;
10}

11

 



给出一个网上对_tmain的一个有用的定义:
   
对于ANSI版本,"_tWinMain"就是"WinMain";对于UINCODE版本,"_tWinMain"就是"wWinMain"。  

  (比如这样的定义:)       所以,_tmain()不过是unicode版本的的main()

1   #ifdef   _UNICODE   
2    #define    _tmain   wmain   
3    #define    _tWinMain   wWinMain   
4    #else    
5    #define    _tmain   main   
6    #define    _tWinMain   WinMain   
7    #endif  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值