インターネットで約 2 時間検索しましたが、解決策が見つかりません。
私のプログラムにはマルチバイト文字セットがあり、コードには次のものがあります。
WCHAR value[1];
_tcslen(value);
そして、コンパイル中にエラーが発生しました:
'strlen': パラメーター 1 を 'WCHAR [1]' から 'const char *' に変換できません
この WCHAR[1] を const char * に変換する方法は?
あまり役に立たない1長WCHAR
配列は単なる例だと思います...
_tcslen
関数ではありません。これは、定義に応じて、strlen
または定義に従って展開するマクロです。マルチバイト文字セット(ISNが定義されていないことを意味します)を使用していて、配列がある場合は、明示的に使用する必要があります。wcslen
_UNICODE
_UNICODE
WCHAR
wcslen
(特に使用している場合を除いて、おそらく_t関数を避けたいと思うでしょう。MSDNのhttp://msdn.microsoft.com/en-us/library/szdfzttz(VS.80)TCHAR
にはあまり良くない概要があります。.aspx ;誰かがもっと良いことを知っていますか?)
VS のプロジェクト設定で「ユニコードを使用」を設定して_tcslen
みwcslen
て_tcslen
くださいstrlen
。すでに指摘されているように、_t
プレフィックス付き関数 (実際には他の多くの関数、たとえば) は、プリコンパイラ定義の値MessageBox()
に基づいて「展開」されるマクロです。_UNICODE
別のオプションは、コードTCHAR
の代わりに使用することWCHAR
です。wchar_t
どちらかまたはタイプに固執しchar
、それらで適切な関数を使用することをお勧めします。
最後になりましたが、質問には c++ のタグが付けられているため、char バッファーの代わりにstd::string
(またはstd::wstring
そのために) and を使用することを検討してください。std::vector
C API 関数でそれらを使用するのは簡単で、一般的にははるかに安全です。
変換関数WideCharToMutliByte()を使用します。
http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx
_tcslenは、環境でUNICODEが#definedされている場合にのみ、WCHARポインタまたは配列を入力として受け取ります。
エラーメッセージから、そうではないと思います
Unicodeを定義する最良の方法は、それをパラメーターとしてコンパイラーに渡すことです。Microsoft Cの場合、/Dスイッチを使用します
cl -c /DUNICODE myfile.cpp
または、配列宣言をTCHARに変更することもできます。これは、UNICODEが#definedでない場合は_tcslenがcharになり、定義されている場合はWCHARになります。