我想连接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 *'
答案 0 :(得分:4)
如果你调用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"将无效。
答案 1 :(得分:0)
正如文件所说
wchar_t * wcsncat(wchar_t * destination,wchar_t * source,size_t num); 将源的第一个num宽字符追加到destination,再加上一个终止的null宽字符。 目的地被退回。 (来源:http://www.cplusplus.com/reference/cwchar/wcsncat/)
您无法将const wchar1作为目标传递,因为该函数将修改此函数然后将其返回。所以你最好
但是,我想知道你是否不能只使用字符串来进行操作,这更像是C ++的方法。 (数组是C风格)