- 締切済み
argv内容の表示動作
プログラミング初心者です。 コンソールアプリケーションのプログラミングの練習として、コマンドライン引数を表示することを考えています。書籍等を参考に手元で入力したソースでは、先頭の一文字しか表示されません。例えば、コマンドラインから > test.exe abc def ghi と入力すると、 > argv[0] = t > argv[1] = a > argv[2] = d > argv[3] = g と表示されます。 環境はWindowsXP + VisualStudio2008で、ソースは下のような具合です。 #include "stdafx.h" int _tmain(int argc, _TCHAR *argv[]){ int i; for ( i = 0; i < argc; i++){ printf("argv[%d] = %s\n", i, argv[i]); } return 0; } どの箇所が原因でこのようになってしまうのでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
VS2005以降コードの記述がUnicodeが標準になっています Unicodeの半角文字列は "AB" ならば 0x41 0x00 0x42 0x00の順に並んでいます printfの %sはマルチバイト文字セットを期待しています したがって 0x41の'A'は出力できますが 'B'の前に0x00があるので出力を打ち切ります プロジェクトの設定を変更して『マルチバイト文字セット』にするか printf を _tprintf に変更しましょう 文字列も _T() マクロ もしくは _TEXT()マクロでくくりましょう _tprintf( _TEXT("argv[%d]=%s\n"), i, atrgv[i] ); といった具合です プロジェクトの設定は IDEのメニューから 構成(C) を 『すべての構成』に変更 プロジェクト > 一番下のプロパティ 左ペインで 構成プロパティ > 全般 右ペインで 文字セットを設定しましょう
お礼
丁寧な解説、どうもありがとうございます。 2バイト文字の後ろをnull終端と認識してしまっていたのですね。なるほど。 初歩的なミスで申し訳ありませんでした。ご協力、感謝致します。