
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
COBOL->C(++)コンバータ
-
C言語の入力した文字を反転させ...
-
文字列から空白を取り除きたい...
-
c言語でユーザ関数を利用して入...
-
【C言語】テキストファイル内の...
-
c言語でソーベルフィルタが作り...
-
間接参照のレベルが異なっています
-
char型からのバイト数取得
-
phpMyAdminからストアドプロシ...
-
javaでunsignedは使えないので...
-
CStringをwchar_tに変換したい
-
C言語のfor文です。 繰り返しの...
-
Linuxでフォルダ内全ファイル名...
-
間接操作のレベルとは
-
getchar()を int でとる理由...
-
c++ 文字列を入力して、一文字...
-
配列をnビットシフトする
-
文字列の中のカンマを消したい
-
決まった文字列幅でのスクロール
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
間接参照のレベルが異なっています
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
テキストデータをそのままバイ...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
charでの計算?
-
配列をnビットシフトする
-
c++ 文字列を入力して、一文字...
-
'const char *' 型は 'char *' ...
-
c言語でユーザ関数を利用して入...
-
干支のプログラム
-
switch文で文字を比較すること...
-
char型からのバイト数取得
-
ネットワークにつながっている...
-
getchar()を int でとる理由...
-
間接操作のレベルとは
-
str系関数を使わずに二つの文字...
おすすめ情報