比方說,我有一個寬字符串這樣
使用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