如果我想用结构填充向量,并且在结构中我需要动态分配/重新定位WCHAR
数组,我将如何填充它?
我无法使用std::wstring
,因为我将使用Windows API的成员。
像RegQueryValueEx
这样的函数需要LPBYTE
来接收数据。
或者我应该使用其他一些STL容器吗?
示例代码:
typedef struct {
WCHAR *str1;
WCHAR *str2;
DWORD SomeOtherStuff;
} MYSTRUCT;
vector<MYSTRUCT> myvector;
答案 0 :(得分:2)
对结构成员使用std::vector<WCHAR>
。这将为您的结构提供必要的复制/移动语义,以将其放在vector
中,当您需要某个API的原始指针时,它可以作为&str1[0]
。
在执行任何可访问数据的操作之前,请务必确保它足够大(通过将其初始化为所需大小,或调用resize()
)。还要记住,在调整向量大小时,数据的指针和迭代器将变为无效。
答案 1 :(得分:0)
您可以为结构定义复制构造函数,赋值运算符和析构函数。然后,每个实例制作的所有副本都有自己的动态分配内存副本。
或者您可以使用std::wstring
std::wstring
提供了一个访问器方法c_str
,它为您提供了一个指向底层以null结尾的字符串的指针。这允许您将std :: wstring与C API一起使用。
std::wstring wide_string;
some_win_api_call( wide_string.c_str() ); // sending a string to winapi
要从winapi获取字符串,您需要自己分配一个缓冲区,并传入指向缓冲区的指针以及缓冲区的长度。
wide_string.reserve( 256 ); // allocate some space to receive a string
get_string_from_winapi( &wide_string[0], wide_string.capacity() );
如果api想要以字节为单位的长度,则可能需要执行wide_string.capacity() * sizeof(wchar_t)
。我的例子假设字符长度。