2

インターネットで約 2 時間検索しましたが、解決策が見つかりません。

私のプログラムにはマルチバイト文字セットがあり、コードには次のものがあります。

 WCHAR value[1];

 _tcslen(value);

そして、コンパイル中にエラーが発生しました:

'strlen': パラメーター 1 を 'WCHAR [1]' から 'const char *' に変換できません

この WCHAR[1] を const char * に変換する方法は?

4

4 に答える 4

4

あまり役に立たない1長WCHAR配列は単なる例だと思います...

_tcslen関数ではありません。これは、定義に応じて、strlenまたは定義に従って展開するマクロです。マルチバイト文字セット(ISNが定義されていないことを意味します)を使用していて、配列がある場合は、明示的に使用する必要があります。wcslen_UNICODE_UNICODEWCHARwcslen

(特に使用している場合を除いて、おそらく_t関数を避けたいと思うでしょう。MSDNのhttp://msdn.microsoft.com/en-us/library/szdfzttz(VS.80)TCHARにはあまり良くない概要があります。.aspx ;誰かがもっと良いことを知っていますか?)

于 2009-12-27T19:02:25.733 に答える
3

VS のプロジェクト設定で「ユニコードを使用」を設定して_tcslenwcslen_tcslenくださいstrlen。すでに指摘されているように、_tプレフィックス付き関数 (実際には他の多くの関数、たとえば) は、プリコンパイラ定義の値MessageBox()に基づいて「展開」されるマクロです。_UNICODE

別のオプションは、コードTCHARの代わりに使用することWCHARです。wchar_tどちらかまたはタイプに固執しchar、それらで適切な関数を使用することをお勧めします。

最後になりましたが、質問には c++ のタグが付けられているため、char バッファーの代わりにstd::string(またはstd::wstringそのために) and を使用することを検討してください。std::vectorC API 関数でそれらを使用するのは簡単で、一般的にははるかに安全です。

于 2009-12-27T20:44:39.020 に答える
1

変換関数WideCharToMutliByte()を使用します。

http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx

于 2009-12-27T19:00:45.143 に答える
0

_tcslenは、環境でUNICODEが#definedされている場合にのみ、WCHARポインタまたは配列を入力として受け取ります。

エラーメッセージから、そうではないと思います

Unicodeを定義する最良の方法は、それをパラメーターとしてコンパイラーに渡すことです。Microsoft Cの場合、/Dスイッチを使用します

cl -c /DUNICODE myfile.cpp

または、配列宣言をTCHARに変更することもできます。これは、UNICODEが#definedでない場合は_tcslenがcharになり、定義されている場合はWCHARになります。

于 2009-12-27T19:19:54.733 に答える