- PR -

main関数の引数

1
投稿者投稿内容
cyan
会議室デビュー日: 2006/07/20
投稿数: 12
投稿日時: 2007-06-15 02:20
初めまして。
VisualC++Express2005を使用していて解らないことがあり、教えてください。
プロジェクトからコンソールアプリケーションを作成し、以下のようにしてmain関数の引数を取得して表示しようとすると、引数の1文字目しか取得されません。

int _tmain(int argc, _TCHAR* argv[])
{
printf("%s\n", argv[1]);
return 0;
}
上記のコードにコマンドから引数 aaa を与えても、表示されるのは、a 1つのみです。

よろしくお願いいたします。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-06-15 03:25
VS2005 で扱う _TCHAR は default で Unicode です。

コード:

int _tmain(int argc, _TCHAR* argv[])
{
if (argc > 1)
{
printf_s("%S\n", argv[1]);
}
return 0;
}



printf 関数の型フィールド文字

_________________
ちゃっぴ@わんくま同盟
ちゃっぴの監禁部屋

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2007-06-15 03:27 ]
cyan
会議室デビュー日: 2006/07/20
投稿数: 12
投稿日時: 2007-06-15 08:38
ちゃっぴさん ご回答ありがとうございます。
教えて頂いた通りに変更し、うまくいきました。
ありがとうございました。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-06-15 08:45
_TCHARを使う場合、コンパイルオプションの文字セット
(「構成プロパティ」−「全般」−「文字セット」のところ)
を変えてもビルドできるようにすべきですので、

>printf_s("%S\n", argv[1]);
とすると、Unicode文字セットを使う場合のみしか正常に動かないことになるので、
printf(printf_s)ではなくTCHARルーチンの関数+_Tマクロ(TEXTマクロ)を使うべきでしょう。

よって、
コード:
int _tmain(int argc, _TCHAR* argv[])
{
    if (argc > 1)
    {
        _tprintf(_T("%s\n"), argv[1]);
    }
    return 0;
}


といったようなコードにすべきでしょう。
また、Unicode文字セットでビルドする場合日本語文字が表示されない場合も
あるので、setlocaleの記述を必要に応じて加えます。

参考)
MSDN
Tchar.h における汎用テキストのマッピング

Unicode対応プログラミング

引用:
引数の1文字目しか取得されません。


については
Editコントロールについてのスレッドを参考にしてみてください。
cyan
会議室デビュー日: 2006/07/20
投稿数: 12
投稿日時: 2007-06-15 22:53
Blue様 ご教授ありがとうございます。

とても参考になりました。
教えて頂いたページを参照して勉強します。
ありがとうございました。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-06-15 23:52
すいません。私が勉強させていただきました。
_________________
1

スキルアップ/キャリアアップ(JOB@IT)