こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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;
}

どの箇所が原因でこのようになってしまうのでしょうか?

投稿日時 - 2008-11-15 01:56:01

QNo.4479471

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

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) を 『すべての構成』に変更
プロジェクト > 一番下のプロパティ
左ペインで 構成プロパティ > 全般
右ペインで 文字セットを設定しましょう

投稿日時 - 2008-11-15 03:43:46

お礼

丁寧な解説、どうもありがとうございます。
2バイト文字の後ろをnull終端と認識してしまっていたのですね。なるほど。
初歩的なミスで申し訳ありませんでした。ご協力、感謝致します。

投稿日時 - 2008-11-15 13:38:53

あなたにオススメの質問