首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ /串联std::string和wchar*到wchar*

C++ /串联std::string和wchar*到wchar*
EN

Stack Overflow用户
提问于 2013-03-01 05:10:04
回答 2查看 4.7K关注 0票数 2

我想连接一个std::stringWCHAR*,结果应该是WCHAR*

我尝试了以下代码

代码语言:javascript
复制
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 );

我有以下错误

error C2220:作为错误-无“对象”文件生成的警告 错误C2664:“wcsncat”:无法将参数1从“const wchar_t *”转换为“wchar_t*”

EN

回答 2

Stack Overflow用户

发布于 2013-03-01 05:32:42

如果您调用string.c_str()获取原始缓冲区,它将返回一个const指针,以指示您不应该尝试更改缓冲区。当然,你不应该试图把任何东西连在一起。使用第二个string类实例,让运行时为您完成大部分工作。

代码语言:javascript
复制
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“将无效。

票数 4
EN

Stack Overflow用户

发布于 2013-03-01 05:33:28

正如文件上说的

wchar_t * wcsncat ( wchar_t *目的,wchar_t * source,size_t num );将源的第一个num宽字符附加到目标,再加上一个终止空宽字符。返回目的地。(资料来源:http://www.cplusplus.com/reference/cwchar/wcsncat/)

您不能将您的const wchar1作为目标传递,因为函数将修改它,然后返回它。所以你最好

  • 分配适当大小的wchar数组。
  • 把你的字符串复制到里面
  • 用您的newley分配的wchar数组作为目标调用wcsncat。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15150946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档