2

std::stringとを連結したいのでWCHAR*、結果はになりWCHAR*ます。

次のコードを試しました

size_t needed = ::mbstowcs(NULL,&input[0],input.length());
std::wstring output;
output.resize(needed);
::mbstowcs(&output[0],&input[0],input.length());
const wchar_t wchar1 = output.c_str();
const wchar_t * ptr=wcsncat( wchar1, L" program", 3 );

次のエラーが発生しました

エラーC2220:警告はエラーとして扱われます-「オブジェクト」ファイルは生成されません

エラーC2664:'wcsncat':パラメータ1を'constwchar_t*'から'wchar_t*'に変換できません

4

2 に答える 2

4

生のバッファを取得するために呼び出すstring.c_str()と、バッファを変更しようとしてはならないことを示すconstポインタが返されます。そして間違いなく、それに何かを連結しようとすべきではありません。2番目の文字列クラスインスタンスを使用して、ランタイムにほとんどの作業を任せます。

std::string input; // initialized elsewhere
std::wstring output;

output = std::wstring(input.begin(), input.end());
output = output + std::wstring(L" program"); // or output += L" program";
const wchar_t *ptr = output.c_str();

これも覚えておいてください。「出力」がスコープ外になり、破棄されると、「ptr」は無効になります。

于 2013-03-01T05:32:42.227 に答える
0

ドキュメントが言うように

wchar_t * wcsncat(wchar_t *宛先、wchar_t *ソース、size_t num); ソースの最初のnumワイド文字と、終了するnullワイド文字を宛先に追加します。宛先が返されます。(出典:http ://www.cplusplus.com/reference/cwchar/wcsncat/ )

const wchar1を宛先として渡すことはできません。これは、関数がこれを変更してから返すためです。だからあなたはより良い

  • 適切なサイズのwchar配列を割り当てます
  • 文字列をコピーします
  • newleyが割り当てたwchar配列を宛先としてwcsncatを呼び出します。

ただし、文字列を使用して操作を実行することはできないのではないかと思います。これは、C++で実行する方法です。(配列はCスタイルです)

于 2013-03-01T05:33:28.090 に答える