2013-03-01 47 views
2

我想連接一個std::stringWCHAR*,結果應該是WCHAR*C++ /串連的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從'const wchar_t *'轉換爲'wchar_t *'

+7

這很好。你嘗試過什麼嗎? – Rapptz 2013-03-01 05:10:44

+0

你不受歡迎。嘗試一下,向我們展示一些努力或使用示例,然後編輯您的問題。 :3c – 2013-03-01 05:12:27

+1

yes ma..ha..aster(* squeeking sound *)... maste ... ma .. ma .. – 2013-03-01 05:12:42

回答

4

如果您致電string.c_str()以獲取原始緩衝區,它將返回一個常量指針以指示您不應該嘗試更改緩衝區。當然,你不應該試圖連接任何東西。使用第二個字符串類實例,並讓運行時爲您完成大部分工作。

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」將是無效的。

+0

對於'std :: wstring(L「程序」)+1; //或輸出+ = L「程序」;'(我不確定'operator +'是否返回std :: wstring',因爲它是非成員函數,不同於'operator + ='。) – n611x007 2013-05-07 15:39:58

0

作爲文檔說

wchar_t的* wcsncat(wchar_t的*目的地,爲wchar_t *源,爲size_t NUM); 將源的第一個數字寬字符追加到目標,並加上終止空寬字符。返回目的地 。 (來源:http://www.cplusplus.com/reference/cwchar/wcsncat/

你不能通過你的常量wchar1作爲目標,因爲該函數將更改這個,然後返回。所以你最好

  • 分配適當大小的WCHAR陣列
  • 您的字符串複製到它與您的紐利分配WCHAR陣列作爲目標
  • 呼叫wcsncat。

但是,我不知道你是否不能僅僅使用字符串來完成你的操作,這更像是C++的方式。 (陣列是C風格)