プロが教える店舗&オフィスのセキュリティ対策術

VC++2010での、通常の

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{

return 0;
}

のウィザードを使って、arvg[1]やargv[2]に引数を与えて、本体内で通常のCで使う

printf("%s\n", argv[1]);

fopen(argv[1], "r");

を使いたいのですが、引数の型が_TCHAR*になっているため文字がそのまま使えません。

int main(int argc, char *argv[])

で使えば問題なく使えるのですが、デフォルトのウィザードを使った時の使い方を知っておきたいのです。

御経験のある方、御教示お願い致します。

A 回答 (2件)

#1の補足への補足。


リテラル文字列を文字セットに対応させるマクロがあります。

_T(__FILE__)

のように_T()で囲ってしまえばいいですよ。

この回答への補足

一応、下記でできるようになりました。
補足とかありましたら、お願い致します。

#include "stdafx.h"
#include <stdio.h>
//#include <tchar.h>
#include <locale.h>

int _tmain(int argc, _TCHAR* argv[])
//int _tmain(int argc, wchar_t* argv[])
{
setlocale(LC_ALL, "japanese");
wprintf(L"%s\n", argv[1]);
FILE *fp;
fp = _wfopen(argv[1], L"r");
if(fp == NULL) {
fwprintf(stderr, L"%s,%d ファイル%sがありません\n",
_T(__FILE__),__LINE__,argv[1]);
return 1;
}

return 0;
}

ありがとうございました。

補足日時:2012/11/29 08:20
    • good
    • 0

プロジェクトプロパティの全体 - 文字セットを"マルチバイト文字セットを使用する"にすれば_TCHARはcharと同じになります。



デフォルトはUnicodeになっていますので、もしUnicodeのまま使いたい場合はprintf等の関数の方をwprintf等のwchar_t型を使用するものに置き換えましょう。
_TCHARのように頭に_Tが付いてるものは文字セットによって中身が切り替わるようになっています。
printfなら_tprintf、fopenなら_tfopenが対で存在します。
この辺はprintf等のヘルプにも記載されてますよ。

この回答への補足

情報ありがとうございます。
ちょっと調べて下記(デフォルトのUnicode)でやってみたのですが、

#include "stdafx.h"
#include <stdio.h>
//#include <tchar.h>

int _tmain(int argc, _TCHAR* argv[])
{
wprintf(L"%s\n", argv[1]);
FILE *fp;
fp = _wfopen(argv[1], L"r");
if(fp == NULL) {
fwprintf(stderr, L"%s,%d ファイル%sがありません\n",
__FILE__,__LINE__,argv[1]);
return 1;
}

return 0;
}


(結果)
test.txt
?????????????????????????????????,16

になってしまいます。漢字の変換とか、__FILE__の多分特殊文字の変換がうまくいってないような
のですが、他に何か設定しないといけないものってあるのでしょうか?

分かれば教えてください。

補足日時:2012/11/29 01:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!