繁体   English   中英

在C ++中将变量wstring分配给Char数组

[英]Assign variable wstring to Char array in C++

我有如下字符数组:

TCHAR name[256] = L"abc";

我还有另一个wstring矢量,如下所示

std::vector<std::wstring> nameList;
nameList.push_back(L"cde");
nameList.push_back(L"fgh");

我想将nameList向量的第一个元素分配给name数组,

有人可以帮我吗?

您可以使用std::copy ; name是一个有界的数组,但是它作为函数参数的使用会衰减到指向其第一个元素的指针,这满足了输出迭代器的要求。

所以你可以:

wchar_t name[256] = L"abc";

std::vector<std::wstring> nameList;
nameList.push_back(L"cde");
nameList.push_back(L"fgh");

std::copy(nameList.front().begin(), nameList.front().end(), name);

注意:这不会在缓冲区中添加任何尾随\\0终止符; 如果您想替换/覆盖name ,则还应该使用std::wstring并为自己节省一些麻烦

鉴于您的问题以及必须使用数组而不是wstring的假设,最好的选择可能是使用std::copy甚至是老式的memcpy 但是,由于以下两个原因,它们很危险:

  1. 如果TCHAR实际上不是wchar_t,则可能存在内存错误。
  2. 如果nameList包含的字符串长于255个TCHAR字符,则将导致缓冲区溢出。

也就是说,您可以使用以下命令安全地执行此操作:

if (nameList[0].size() >= 256) {
    throw std::length_error("string too long");
}
std::copy(nameList[0].begin(), nameList[0].end(), name);
name[nameList[0].size()] = TCHAR(0);

如果TCHAR不是wchar_t,您还可以添加static_assert来强制编译器错误,但由于复制将逐字符进行隐式转换,因此可能没有必要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM