`
beckshanling
  • 浏览: 255627 次
  • 性别: 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请求的实现代码

    代码如下:#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

    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

    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++计算圆的面积.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; }

    C++中基于Crt的内存泄露检测

    尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询。 #ifdef _DEBUG #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) ... int _tmain(int argc, _TCHAR* argv[])

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

    主要介绍了C++程序中main(int argc, char *argv[])函数的参数意义,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    各种排序算法

    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_...

    C++中关于Crt的内存泄漏检测的分析介绍

    尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询。 代码如下:#ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE...int _tmain(int argc, _TCHAR* argv[]){ char* p = n

    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 &...

    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_...

    C++中结构体占内存空间大小的判断

    1、功能:  申明一个结构体,在以下四种情况下判断其占有的内存空间的大小;  2、程序及其代码  2.1 大化对其原则 ... int _tmain(int argc, _TCHAR* argv[]) {  typedef struct STUDENT_INFO  

    vector list map 遍历删除制定元素 防止迭代器失效的实例

    方法如下所示: // k_control.cpp : 定义控制台应用程序的入口点。...int _tmain(int argc, _TCHAR* argv[]) { printf(“run main”); vector&lt;int&gt; vect ; vect.push_back(1); vect.push_back(2); vect.push_ba

    OpenCV实现图像轮廓检测以及外接矩形

    前两篇博文分别介绍了图像的边缘检测和轮廓检测,本文接着介绍图像的轮廓检测和轮廓外接矩形: ...int _tmain(int argc, _TCHAR* argv[]) { //load src image string img_name=..\\image_norm\\71253.jpg; Ma

    详解C++调用Python脚本中的函数的实例代码

    1.环境配置 安装完python后,把python的include和lib拷贝到自己的工程目录下 然后在工程中包括进去 2.例子 先写一个python的测试脚本,如下 ...int _tmain(int argc, _TCHAR* argv[]) { //初始化Pyt

Global site tag (gtag.js) - Google Analytics