プロが教えるわが家の防犯対策術!

TCHARはUNICODEが扱えるときいたので早速つかってみた。以下は引数を表示するプログラムである。
Visual C++ Express Editionを使った。

#include <stdio.h>
#include <tchar.h>

int _tmain(int argc, _TCHAR* argv[])
{
int i=0;
while(i<argc){
_tprintf(_T("%s\r\n"),argv[i++]);
}
return 0;
}


しかし上記プログラムに日本語の引数をわたすと文字化けするではないか。なでしょうか?

A 回答 (1件)

Unicodeを使うならTCHARではなくwchar_t系を使うべきだと思いますが……。


# VC++の場合。

> しかし上記プログラムに日本語の引数をわたすと文字化けするではないか。

setlocaleしていないのですから,当然の動作です。
ワイド文字列のストリームへの出力はfputwcを使ったかの如くなされ,fputwcはwcrtombで変換したのと同等の文字列を出力します。
# ISO/IEC 9899:1999 7.19.3 Files / Paragraph.12
そして,wcrtombのはLC_CTYPEカテゴリの現在のロケールに依存します。
# ISO/IEC 9899:1999 7.24.6 Extended multibyte/wide character conversion utilities / Paragraph. 2
    • good
    • 0
この回答へのお礼

どうも。解決しました。

#include <stdio.h>
#include <tchar.h>
#include <locale.h>

int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Japanese");
int i=0;
while(i<argc){
_tprintf(_T("%s\r\n"),argv[i++]);
}
return 0;
}

お礼日時:2009/10/23 00:33

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