比方说,我有一个宽字符串这样
使用std ::复制到Windows上
std::wstring s(L"Stack Over Flow");
,我想复制到宽字符std::vector<wchar_t>
向量(的空值终止字符串)使用std::copy
以下两个方法似乎工作
首先
std::vector<wchar_t> c(s.size() + 1);
std::copy(s.c_str(), s.c_str() + s.length() + 1, c.begin());
wprintf(L"%s\n",&c[0]);
二
std::vector<wchar_t> d(s.size() + sizeof(wchar_t));
std::copy(s.c_str(), s.c_str() + s.length() + sizeof(wchar_t), d.begin());
wprintf(L"%s\n",&d[0]);
但我想第一个应该失败,因为我没有为结尾空字符分配正确的大小。我错过了什么?
编辑
不,我不希望这个
std::vector<wchar_t> c(s.begin(), s.end()); <br>
因为我调整现有缓冲
编辑
通过改变使用案例(使用C样打印API)我可以看到第二个版本可能是正确的。
首先打印Stack Over Flow????????
预期
一个用于常见原因将'std :: wstring'复制到'vector'是在调用期望以空值终止的'wchar_t *'的API时。 –
MSalters
如果你说*为什么*两个版本都是错误的,你会从我得到+1 ;-) – rubenvb
@rubenvb:完成。 – Nawaz