簡體   English   中英

C ++ /將std :: string和wchar *連接到wchar *

[英]C++ / Concatenate std::string and wchar* to wchar*

我想連接一個std::stringWCHAR* ,結果應該在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從'const wchar_t *'轉換為'wchar_t *'

如果調用string.c_str()獲取原始緩沖區,它將返回const指針,指示您不應嘗試更改緩沖區。 絕對不應該將任何內容串聯起來。 使用第二個字符串類實例,讓運行時為您完成大部分工作。

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”將無效。

如文檔所述

wchar_t * wcsncat(wchar_t *目標,wchar_t *源,size_t num); 將源的前num個字符追加到目標,再加上一個終止的null寬字符。 返回目的地。 (來源: http : //www.cplusplus.com/reference/cwchar/wcsncat/

您不能將const wchar1作為目的地傳遞,因為該函數會對此進行修改然后返回。 所以你更好

  • 分配適當大小的wchar數組
  • 將您的字符串復制到其中
  • 調用wcsncat,並將分配給newley的wchar數組作為目標。

但是,我想知道您是否不能僅使用字符串來執行操作,而這是C ++的處理方式。 (數組是C樣式的)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM