FC2ブログ

[Visual C++ 2008] (const)char*と_TCHAR*

 Visual C++ 2008でちょっとものを作っていたとき、なんとなく引っかかってしまったことがあったのでメモ。

ソース1

#include <TCHAR.H>
#include <stdio.h>
#include <string.h>

int _tmain(int argc, _TCHAR* argv[])
{
    if(argc>1)
    {
        printf("%s\n\0",(const char*)argv[0]);
        printf("%s\n\0",(const char*)argv[1]);

        if(strncmp((const char*)argv[1],"/a",2)==0)
        {
            //  実行に成功するとここを通過する予定。
        }
    }
    return 0;
}

ソース2

//#include <TCHAR.H>
#include <stdio.h>
#include <string.h>

//int _tmain(int argc, _TCHAR* argv[])
int main(int argc, char* argv[])
{
    if(argc>1)
    {
        printf("%s\n\0",(const char*)argv[0]);
        printf("%s\n\0",(const char*)argv[1]);

        if(strncmp((const char*)argv[1],"/a",2)==0)
        {
            //  実行に成功するとここを通過する予定。
        }
    }
    return 0;
}

 上記ソースをコンパイルして、引数に"/a"を指定してコマンド プロンプトから実行し、動作を比較。
 ソース1を実行すると、printfしても

c
/

と表示され、期待通りの結果にならない。(一行目はプログラムの実行パス、二行目は引数、になるはず。)
 ソース2を実行すると、

c:\temp\sample.exe
/a

といったように表示される。(一行目は実行環境ごとに異なるので注意)
 どうやら、main関数の第二引数を_TCHAR*型のままにしておくと、引数を指定してもまともに解釈できないようだ。

スポンサーサイト



theme : プログラミング
genre : コンピュータ

FC2ブックマーク | この記事をokyuuへインポート | このエントリーを含むはてなブックマーク | ニフティクリップへ追加 | この記事をクリップ! | イザ!ブックマーク | POOKMARK Airlinesに登録する | del.icio.us |
動作未検証 | | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証

trackback


この記事にトラックバックする(FC2ブログユーザー)

[IT]今日のクリップとその他のこと

はてなブックマーク - 楽天が政治参加啓発サイト「LOVE JAPAN」開設へ,カードによる個人献金サービスも:ITpro Web関連 Web+政治  オバマ大統領の選挙活動でTwitterが使い倒されたことは有名ですが、日本国内では選挙活動の規制が強く、なんと選挙期間中はWebサイトの更新

comment

管理者にだけメッセージを送る

カレンダー
10 | 2019/11 | 12
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最近の記事
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
いろいろリンクボタン
埋め込みe-Words