C ++ /将std :: string和wchar *连接到wchar *

时间:2013-03-01 05:10:05

标签: c++ visual-c++

我想连接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 *'

2 个答案:

答案 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作为目标传递,因为该函数将修改此函数然后将其返回。所以你最好

  • 分配适当大小的wchar数组
  • 将您的字符串复制到其中
  • 使用newley分配的wchar数组作为目标来调用wcsncat。

但是,我想知道你是否不能只使用字符串来进行操作,这更像是C ++的方法。 (数组是C风格)