• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            悲情土仔一生

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              14 隨筆 :: 0 文章 :: 74 評(píng)論 :: 0 Trackbacks

            如何輸出_tmain中的argv[]


            作者:Tuuzed(土仔)  
            版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
            http://www.shnenglu.com/tuuzed/archive/2008/02/23/43153.html



                使用過(guò)VS2005中VC++的大俠們應(yīng)該對(duì)_tmain不陌生。是的,_tmain是Microsoft自己弄出來(lái)的東西,關(guān)于它的問(wèn)題網(wǎng)上有一堆(GOOGLE Search)。今天想用VS2005中的VC++做一個(gè)WIN32控制臺(tái)(console)下的應(yīng)用程序,向?qū)С绦蚰J(rèn)給出的是以下內(nèi)容:

             

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

            9

            想當(dāng)然,很好,很容易。試試列出命令的參數(shù):

             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

            運(yùn)行結(jié)果竟然是這樣的:

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

            1

            003A5210

            003A5210”是什么值?一開(kāi)始就弄不懂了。

            如果把_tmain函數(shù)變?yōu)椋?/span>

            1int main(int argc, char* argv[])
            2{
            3    cout << argc <<endl;
            4    cout << argv[0<<endl;
            5    return 0;
            6}

            7

            運(yùn)行結(jié)果正常:

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

            1

            d:\MyData\CSharp\Projects\test\Debug\test.exe

            頭大了。最后分別對(duì)兩個(gè)函數(shù)運(yùn)用斷點(diǎn)中的反匯編看看,發(fā)現(xiàn)原來(lái)**argv竟然是wchar_t**,再翻弄了一下_TCHAR的聲明:typedef wchar_t     _TCHAR;
            一切明白了。要輸出這個(gè)_TCHAR只能用cout的另一個(gè)版本:wcout。
            為什么呢?原因很簡(jiǎn)單,因?yàn)樗麄兌紟Я艘粋€(gè)“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




            給出一個(gè)網(wǎng)上對(duì)_tmain的一個(gè)有用的定義:
               
            對(duì)于ANSI版本,"_tWinMain"就是"WinMain";對(duì)于UINCODE版本,"_tWinMain"就是"wWinMain"。  

              (比如這樣的定義:)  

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

                所以,_tmain()不過(guò)是unicode版本的的main() 

            posted on 2008-02-23 22:53 土仔 閱讀(5968) 評(píng)論(9)  編輯 收藏 引用 所屬分類: 土仔編程

            評(píng)論

            # re: 如何輸出_tmain中的argv[] 2008-02-24 13:32 @Zeus
            博主嘗試用_tprintf呢  回復(fù)  更多評(píng)論
              

            # re: 如何輸出_tmain中的argv[] 2008-02-24 16:13 Javen
            所有的字符串處理函數(shù)都有寬字符版和窄字符版
            MS使用_t前綴的函數(shù)目的就在于期望使用一種統(tǒng)一寫法可以方便地在寬字符版本和窄字符版本函數(shù)間快速地替換。所有的_t前綴函數(shù)都是宏定義,MS根據(jù)你的預(yù)定義,預(yù)編譯時(shí)將之替換成實(shí)際的函數(shù)。
            所以,如果你用_tmain函數(shù)的話,后面的字符處理函數(shù)也盡量寫成_t系列的  回復(fù)  更多評(píng)論
              

            # re: 如何輸出_tmain中的argv[] 2008-02-24 22:01 土仔
            @@Zeus
            是的。如果用_tprintf就沒(méi)有問(wèn)題了。  回復(fù)  更多評(píng)論
              

            # re: 如何輸出_tmain中的argv[] 2008-02-24 22:03 土仔
            @Javen
            確實(shí)沒(méi)錯(cuò)。只是,我是第一次接觸這個(gè)_tmain。寫下這個(gè)的目的是留下一個(gè)解決的思路,越往下,了解得就越多了哈。  回復(fù)  更多評(píng)論
              

            # re: 如何輸出_tmain中的argv[] 2008-02-25 12:07 新魔界私服
            牛B  回復(fù)  更多評(píng)論
              

            # re: 如何輸出_tmain中的argv[] 2008-02-25 14:08 aGAric
            VS2005默認(rèn)是Unicode工程.  回復(fù)  更多評(píng)論
              

            # re: 如何輸出_tmain中的argv[] 2008-12-15 15:38 莫耶
            有幫助~  回復(fù)  更多評(píng)論
              

            # re: 如何輸出_tmain中的argv[][未登錄](méi) 2009-04-24 15:52 Max
            Javen說(shuō)的比較全面。

            我最近也遇到這個(gè)類似問(wèn)題,請(qǐng)問(wèn)如何改變這個(gè)缺省UNICODE設(shè)置,改為ANSI
            Coding?

            謝謝!  回復(fù)  更多評(píng)論
              

            # re: 如何輸出_tmain中的argv[][未登錄](méi) 2009-04-24 15:58 Max
            從前從未跟UNICODE打過(guò)交道,我的項(xiàng)目也總是缺省按單字節(jié)編碼的模式運(yùn)作,
            只是這回突然出現(xiàn)問(wèn)題,有點(diǎn)暈。:-)  回復(fù)  更多評(píng)論
              

            中文字幕久久久久人妻| 国产午夜精品理论片久久影视 | 亚洲精品无码专区久久久| 久久91精品久久91综合| 久久综合中文字幕| 亚洲人成网亚洲欧洲无码久久| 欧美精品国产综合久久| 国产精品成人99久久久久91gav| 综合久久精品色| 久久国产精品一区二区| 久久久久久噜噜精品免费直播| 亚洲精品乱码久久久久久蜜桃不卡| 日韩久久久久久中文人妻| 精品久久久无码人妻中文字幕| 久久青青草原综合伊人| 久久丫忘忧草产品| 欧美午夜A∨大片久久 | 久久香综合精品久久伊人| 久久久精品一区二区三区| 久久笫一福利免费导航| 久久久91人妻无码精品蜜桃HD | 久久亚洲AV成人无码| 久久久久人妻一区精品| 91精品国产9l久久久久| 国产精品成人精品久久久| jizzjizz国产精品久久| 人妻精品久久久久中文字幕一冢本| 97超级碰碰碰碰久久久久| 久久久WWW成人| 曰曰摸天天摸人人看久久久| 久久精品蜜芽亚洲国产AV| 国产精品久久久久久久久软件| 一级做a爱片久久毛片| 久久se精品一区二区| 亚洲精品高清国产一线久久| 亚洲精品无码久久久影院相关影片| 无码人妻久久一区二区三区蜜桃 | 无遮挡粉嫩小泬久久久久久久| 国产精品久久久香蕉| 国产成人精品久久| 色婷婷综合久久久久中文|