
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[])
で使えば問題なく使えるのですが、デフォルトのウィザードを使った時の使い方を知っておきたいのです。
御経験のある方、御教示お願い致します。
No.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;
}
ありがとうございました。
No.1
- 回答日時:
プロジェクトプロパティの全体 - 文字セットを"マルチバイト文字セットを使用する"にすれば_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__の多分特殊文字の変換がうまくいってないような
のですが、他に何か設定しないといけないものってあるのでしょうか?
分かれば教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
strncpyと_tcsncpy_sのヌルの扱...
-
fgetsなどのときのstdinのバッ...
-
ASCII変換について
-
CStringをwchar_tに変換したい
-
下記のプログラムがコンパイラ...
-
文字列から空白を取り除きたい...
-
文字列の中のカンマを消したい
-
引数の渡し方と受け方(argv)
-
scanf()について教えてください
-
PROCのコンパイルエラーの取り...
-
charからLPTSTRへの変換方法
-
double型の値をchar配列に変換...
-
至急!C言語文字列置換
-
テキストデータをそのままバイ...
-
間接操作のレベルとは
-
switch文で文字を比較すること...
-
COBOL->C(++)コンバータ
-
英単語をアルファベット順に
-
ネットワークにつながっている...
-
型変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字列から空白を取り除きたい...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
テキストデータをそのままバイ...
-
ネットワークにつながっている...
-
fgetsなどのときのstdinのバッ...
-
double型の値をchar配列に変換...
-
atoi( ) の反対をやりたい
-
charからLPTSTRへの変換方法
-
'const char *' 型は 'char *' ...
-
間接操作のレベルとは
-
c言語プログラミング実行時エラ...
-
c++ 文字列を入力して、一文字...
-
【C言語】構造体内の領域解放(...
-
間接参照のレベルが異なっています
-
C言語の入力した文字を反転させ...
-
構造体のアライメント調整
-
strncpyと_tcsncpy_sのヌルの扱...
-
TCP/IP通信型大文字・小文字変...
-
char型からのバイト数取得
おすすめ情報