如何输出_tmain中的argv[]

如何输出_tmain中的argv[]

今天想用VS2005中的VC++做一个WIN32控制台(console)下的应用程序,向导程序默认给出的是以下内容:
9如何输出_tmain中的argv[] - xiaotot - 享受编码

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

 1 如何输出_tmain中的argv[] - xiaotot - 享受编码 #include  " stdafx.h "
 2 如何输出_tmain中的argv[] - xiaotot - 享受编码
 3 如何输出_tmain中的argv[] - xiaotot - 享受编码 using   namespace  std;  // 必须在stdafx.h增加#include 
 4 如何输出_tmain中的argv[] - xiaotot - 享受编码
 5 如何输出_tmain中的argv[] - xiaotot - 享受编码 int  _tmain( int  argc, _TCHAR *  argv[])
 6 如何输出_tmain中的argv[] - xiaotot - 享受编码如何输出_tmain中的argv[] - xiaotot - 享受编码 如何输出_tmain中的argv[] - xiaotot - 享受编码 {
 7 如何输出_tmain中的argv[] - xiaotot - 享受编码    cout  <<  argc  << endl;
 8 如何输出_tmain中的argv[] - xiaotot - 享受编码    cout  <<  argv[ 0 << endl;
 9 如何输出_tmain中的argv[] - xiaotot - 享受编码     return   0 ;
10 如何输出_tmain中的argv[] - xiaotot - 享受编码}
11 如何输出_tmain中的argv[] - xiaotot - 享受编码

运行结果竟然是这样的:

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

1

003A5210

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

如果把_tmain函数变为:

1 如何输出_tmain中的argv[] - xiaotot - 享受编码 int  main( int  argc,  char *  argv[])
2 如何输出_tmain中的argv[] - xiaotot - 享受编码如何输出_tmain中的argv[] - xiaotot - 享受编码 如何输出_tmain中的argv[] - xiaotot - 享受编码 {
3 如何输出_tmain中的argv[] - xiaotot - 享受编码    cout  <<  argc  << endl;
4 如何输出_tmain中的argv[] - xiaotot - 享受编码    cout  <<  argv[ 0 << endl;
5 如何输出_tmain中的argv[] - xiaotot - 享受编码     return   0 ;
6 如何输出_tmain中的argv[] - xiaotot - 享受编码}
7 如何输出_tmain中的argv[] - xiaotot - 享受编码

运行结果正常:

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”在前面啊!如何输出_tmain中的argv[] - xiaotot - 享受编码

能正确输出_TCHAR* argv[]的版本:

 1 如何输出_tmain中的argv[] - xiaotot - 享受编码 #include  " stdafx.h "
 2 如何输出_tmain中的argv[] - xiaotot - 享受编码
 3 如何输出_tmain中的argv[] - xiaotot - 享受编码 using   namespace  std;
 4 如何输出_tmain中的argv[] - xiaotot - 享受编码
 5 如何输出_tmain中的argv[] - xiaotot - 享受编码 int  _tmain( int  argc, _TCHAR *  argv[])
 6 如何输出_tmain中的argv[] - xiaotot - 享受编码如何输出_tmain中的argv[] - xiaotot - 享受编码 如何输出_tmain中的argv[] - xiaotot - 享受编码 {
 7 如何输出_tmain中的argv[] - xiaotot - 享受编码    wcout  <<  argc  << endl;
 8 如何输出_tmain中的argv[] - xiaotot - 享受编码    wcout  <<  argv[ 0 << endl;
 9 如何输出_tmain中的argv[] - xiaotot - 享受编码     return   0 ;
10 如何输出_tmain中的argv[] - xiaotot - 享受编码}
11 如何输出_tmain中的argv[] - xiaotot - 享受编码




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

  (比如这样的定义:)  

1 如何输出_tmain中的argv[] - xiaotot - 享受编码   #ifdef   _UNICODE   
2 如何输出_tmain中的argv[] - xiaotot - 享受编码   #define    _tmain   wmain   
3 如何输出_tmain中的argv[] - xiaotot - 享受编码   #define    _tWinMain   wWinMain   
4 如何输出_tmain中的argv[] - xiaotot - 享受编码   #else    
5 如何输出_tmain中的argv[] - xiaotot - 享受编码   #define    _tmain   main   
6 如何输出_tmain中的argv[] - xiaotot - 享受编码   #define    _tWinMain   WinMain   
7 如何输出_tmain中的argv[] - xiaotot - 享受编码   #endif  

    所以,_tmain()不过是unicode版本的的main() 

 

1 如何输出_tmain中的argv[] - xiaotot - 享受编码 #include  " stdafx.h "
2 如何输出_tmain中的argv[] - xiaotot - 享受编码
3 如何输出_tmain中的argv[] - xiaotot - 享受编码 int  _tmain( int  argc, _TCHAR *  argv[])
4 如何输出_tmain中的argv[] - xiaotot - 享受编码如何输出_tmain中的argv[] - xiaotot - 享受编码 如何输出_tmain中的argv[] - xiaotot - 享受编码 {
5 如何输出_tmain中的argv[] - xiaotot - 享受编码
6 如何输出_tmain中的argv[] - xiaotot - 享受编码     return   0 ;
7 如何输出_tmain中的argv[] - xiaotot - 享受编码
8 如何输出_tmain中的argv[] - xiaotot - 享受编码}

你可能感兴趣的:(VC++知识)