vs2005 int _tmain(int argc, _TCH…

来源:互联网 发布:淘宝新店东西怎么样 编辑:程序博客网 时间:2024/05/19 08:02

   VS2005中的VC++做一个WIN32控制台(console)下的应用程序,向导程序默认给出的是以下内容:
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 - 享受编码}


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

 1如何输出_tmain中的argv[] - xiaotot - 享受编码#include "stdafx.h"
 2如何输出_tmain中的argv[] - xiaotot - 享受编码
 3如何输出_tmain中的argv[] - xiaotot - 享受编码using namespace std; //必须在stdafx.h增加#include <iostream>
 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()  

原创粉丝点击