0

Visual C ++ 2010を使用していますが、コードは次のとおりです。

#include "stdafx.h"
#include <stdio.h> 

int _tmain(int argc, _TCHAR* argv[]) { 
    printf("step 0: %s\n", argv[0]);
    int d;
    scanf("%d",&d);
    return 0;
}

_UNICODEを選択すると、出力は「D」になり、_MBCSを選択すると、正常に機能し、出力は「D:\ VCTest\c1006.exe」になります。

_UNICODEでなぜ間違っているのですか?_UNICODEと_MBCSの両方に同じコードを使用するにはどうすればよいですか?

4

1 に答える 1

5

Unicodeプロジェクトをコンパイルする場合、_TCHARwchar_t、ではなく、charです。

%sフォーマット指定子は、対応する引数がchar const*;であることを想定しています。を渡すwchar_t*ため、予期しない結果になります。

を使用できます。これにより、プロジェクトがANSIまたはUnicodeのどちらとしてビルドされているかに基づいて_tprintf、適切printfな関数(printfまたは)が選択されます。wprintfを使用する場合は、幅の広い文字列にフォーマット指定子をprintf使用できますが%ls、プロジェクトがANSIまたはUnicodeのどちらでビルドされているかに応じて、異なるフォーマット文字列を使用する必要があります。

または、Unicodeを使用するだけで_TCHAR、友だちはまったく使用しないでください。

于 2012-10-06T02:39:02.203 に答える