- ベストアンサー
_TCHAR*での引数の読み込み:VC++2010での通常の引数の使い方
- VC++2010で、_TCHAR*型の引数を使って引数の読み込みを行いたい場合、ウィザードによる通常のC言語の引数の使い方とは異なる方法が必要です。
- ウィザードを使った場合、引数の型が_TCHAR*になりますが、文字列をそのまま使うことはできません。
- 代わりに、_tprintf関数を使ってフォーマット文字列を作成し、%sの部分に引数を指定することで、引数の内容を表示することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1の補足への補足。 リテラル文字列を文字セットに対応させるマクロがあります。 _T(__FILE__) のように_T()で囲ってしまえばいいですよ。
その他の回答 (1)
- kabe64
- ベストアンサー率72% (13/18)
プロジェクトプロパティの全体 - 文字セットを"マルチバイト文字セットを使用する"にすれば_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__の多分特殊文字の変換がうまくいってないような のですが、他に何か設定しないといけないものってあるのでしょうか? 分かれば教えてください。
補足
一応、下記でできるようになりました。 補足とかありましたら、お願い致します。 #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; } ありがとうございました。