`
beckshanling
  • 浏览: 262775 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

如何输出_tmain中的argv[]

    博客分类:
  • C++
阅读更多

 

作者: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
3int _tmain(int argc, _TCHAR* argv[])
4{
5
6    return 0;
7
8}

9

 

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

 1#include "stdafx.h"
 2
 3using namespace std; //必须在stdafx.h增加#include <iostream>
 4
 5int _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函数变为:运行结果正常:

1int 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
 3using namespace std;
 4
 5int _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 

 

分享到:
评论

相关推荐

    int _tmain(int argc, _TCHAR argv[]) 函数

    int _tmain(int argc, _TCHAR argv[]) int _tmain(int argc, _TCHAR argv[])

    浅析_tmain()与main()的区别

    有这么两行 #include #include 我们可以在头文件里找到_tmain的宏...int main(int argc, char* argv[]); _tmain()是windows提供的对unicode字符集和ANSI字符集进行自动转换用的程序入口点函数。 函数签名为: int _tma

    c++实现发送http请求通过get方式获取网页源代码

    代码如下:#include &lt;stdio&gt;#include &lt;windows&gt;#...int _tmain(int argc, _TCHAR* argv[]){ urlopen(_T(“//www.jb51.net”)); return 0;}void urlopen(_TCHAR* url){ HINTERNET hSession = InternetOpen(_T(“UrlTe

    C++发送HTTP请求的实现代码

    代码如下:#include &lt;stdio&gt;#include &lt;windows&gt;#...int _tmain(int argc, _TCHAR* argv[]){ urlopen(_T(“http://coderzh.cnblogs.com”)); return 0;} void urlopen(_TCHAR* url){ HINTERNET hSession = Interne

    opencv 基础实验例子

    int _tmain(int argc, _TCHAR* argv[]) { gsrcimage=cvLoadImage("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE); gcannyimage=cvCreateImage(cvGetSize(gsrcimage),IPL_DEPTH_8U,1); cvNamedWindow("lena",CV_WINDOW_...

    opencv 阈值分割

    opencv 阈值分割int _tmain(int argc, _TCHAR* argv[]) { gsrcimage=cvLoadImage("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE); gcannyimage=cvCreateImage(cvGetSize(gsrcimage),IPL_DEPTH_8U,1); cvNamedWindow("lena...

    opencv canny 算法实现

    int _tmain(int argc, _TCHAR* argv[]) { gsrcimage=cvLoadImage("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE); gcannyimage=cvCreateImage(cvGetSize(gsrcimage),IPL_DEPTH_8U,1); cvNamedWindow("lena",CV_WINDOW_...

    代码逆向 寻找main函数入口.docx 有点汇编

    逆向的第一步是什么?这要问你学习C语言的第一步是什么,很自然的,逆向的第一步当然也是大名鼎鼎“HelloWorld!...int _tmain(int argc, _TCHAR* argv[]) { printf("Hello World!\r\n"); return 0; }

    通过管道进行cmd进程输入输出重定向,源代码

    int _tmain(int argc, _TCHAR* argv[]) { Console console; if( false == console.RunProcess("cmd.exe") ) { cout; return -1; } string outstr; console.GetOutput("&gt;", 3000, outstr); cout; console....

    c/c++笔记,面试必看,自己总结整理

    - `_tmain()`的定义通常为`int _tmain(int argc, _TCHAR* argv[])`,这里的`_TCHAR`是一个模板类型,根据编译器设置的不同,它可以是`char`或`wchar_t`,以支持不同的字符编码。 4. **返回值**: - `main()`的...

    c++计算圆的面积.cpp

    #include "stdafx.h" #include using namespace std;...int _tmain(int argc, _TCHAR* argv[]) { float r=0; float l,s; cin&gt;&gt;r; l=circle(r); s=area(r); cout; getchar(); getchar(); return 0; }

    并行计算 实验指导书 实验1.doc

    int _tmain(int argc, _TCHAR* argv[]) { printf("Hello from serial.\n"); printf("Thread number = %d\n", omp_get_thread_num()); #pragma omp parallel num_threads(4) { printf("Hello from parallel. ...

    C++程序中main(int argc, char *argv[])函数的参数意义

    C++程序中main(int argc, char *argv[])函数的参数意义 C++程序中main(int argc, char *argv[])函数的参数意义是C++语言中最基础也最重要的概念之一。在C++程序中,main函数是程序的入口点,也是程序开始执行的...

    ACE编程指导方针(使用ACE,扩展ACE的指南)

    - `int ACE_TMAIN(int argc, ACE_TCHAR* argv[])` 其中,`main`函数总是接收以`char`字符串形式的命令行参数;`wmain`目前仅支持Win32平台,并接收以`wchar`字符串形式的命令行参数;而定义`ACE_TMAIN`作为程序...

    各种排序算法

    int _tmain(int argc, _TCHAR* argv[]) { int array[10]={10,3,5,2,4,1,8,7,9,6}; cout&lt;&lt;"nonsorted_array"; print_array(array,10); //cout&lt;&lt;"select_sort"; //select_sort(array,10); //cout&lt;&lt;"bubble_...

    HttpServer.zip

    int _tmain(int argc, _TCHAR* argv[]) { HttpServer httpServer(HttpCallBack); int nRet = httpServer.CreateServer(7002); Sleep(3600000); return 0; } int __stdcall HttpCallBack(std::string &...

    Boost智能指针

    int _tmain(int argc, _TCHAR* argv[]) { boost::scoped_ptr&lt;test&gt; x(new test); x-&gt;print(); return 0; } ``` 2. **`shared_ptr&lt;T&gt;`** - **定义**:`shared_ptr`是一种拥有引用计数的智能指针,可以允许多...

    MQTT VS 静态库

    int _tmain(int argc, _TCHAR* argv[]) { mosquittopp::mosquittopp::lib_init(); int rc; char buf[1024] = "This is test"; mqtt_test test("testID"); rc = test.connect("127.0.0.1"); if (MOSQ_...

    VS2005下动静态库的创建和使用

    完成以上步骤后,在Visual Studio 2005中,通过项目设置指定正确的输出类型为DLL,并进行编译,即可得到所需的动态链接库。 4. **使用动态链接库**: 使用动态链接库可以通过两种方式:静态链接和动态加载。 - ...

Global site tag (gtag.js) - Google Analytics