是否可以将 wchar_t* 字符串作为新字符串复制到向量中?
Is it possible to copy wchar_t* strings to vector as a new string of characters?
我想做的是将指向唯一 wchar_t
字符串的多个不同指针保存到一个向量中。我当前的代码是这样的:
std::vector<wchar_t*> vectorOfStrings;
wchar_t* bufferForStrings;
for (i = 0, i > some_source.length; i++) {
// copy some string to the buffer...
vectorOfStrings.push_back(bufferForStrings);
}
这导致 bufferForStrings
被一次又一次地添加到向量中,这不是我想要的。
RESULT:
[0]: (pointer to buffer)
[1]: (pointer to buffer)
...
我要的是这个:
[0]: (pointer to unique string)
[1]: (pointer to other unique string)
...
根据我对此类字符串的了解,指针指向以空终止符结尾的字符数组的开头。
因此,当前代码有效地导致同一个字符串被一次又一次地复制到缓冲区。我该如何解决这个问题?
最简单的方法是使用 STL 提供的 std:wstring
作为向量元素的类型。您可以使用 class 提供的构造函数隐式 将 wchar_t*
指向的缓冲区的内容复制 到向量(在 push_back()
调用中) .
这是一个简短的演示:
#include <string>
#include <vector>
#include <iostream>
int main()
{
wchar_t test[][8] = { L"first", L"second", L"third", L"fourth" };
std::vector<std::wstring> vectorOfStrings;
wchar_t* bufferForStrings;
size_t i, length = 4;
for (i = 0; i < length; i++) {
// copy some string to the buffer...
bufferForStrings = test[i];
vectorOfStrings.push_back(bufferForStrings);
}
for (auto s : vectorOfStrings) {
std::wcout << s << std::endl;
}
return 0;
}
此外,如果您稍后需要访问向量的元素作为 wchar_t*
指针,您可以使用每个元素的 c_str()
成员函数来检索这样的指针(尽管那将是 const
合格)。
还有其他方法,如果你想避免使用std::wstring
class;对于 'ordinary' char*
缓冲区,您可以使用 strdup()
function to create a copy of the current buffer, and send that to push_back()
. Unfortunately, the equivalent wcsdup()
function is not (yet) part of the standard library (though Microsoft and others 已经实现的)。
我想做的是将指向唯一 wchar_t
字符串的多个不同指针保存到一个向量中。我当前的代码是这样的:
std::vector<wchar_t*> vectorOfStrings;
wchar_t* bufferForStrings;
for (i = 0, i > some_source.length; i++) {
// copy some string to the buffer...
vectorOfStrings.push_back(bufferForStrings);
}
这导致 bufferForStrings
被一次又一次地添加到向量中,这不是我想要的。
RESULT:
[0]: (pointer to buffer)
[1]: (pointer to buffer)
...
我要的是这个:
[0]: (pointer to unique string)
[1]: (pointer to other unique string)
...
根据我对此类字符串的了解,指针指向以空终止符结尾的字符数组的开头。
因此,当前代码有效地导致同一个字符串被一次又一次地复制到缓冲区。我该如何解决这个问题?
最简单的方法是使用 STL 提供的 std:wstring
作为向量元素的类型。您可以使用 class 提供的构造函数隐式 将 wchar_t*
指向的缓冲区的内容复制 到向量(在 push_back()
调用中) .
这是一个简短的演示:
#include <string>
#include <vector>
#include <iostream>
int main()
{
wchar_t test[][8] = { L"first", L"second", L"third", L"fourth" };
std::vector<std::wstring> vectorOfStrings;
wchar_t* bufferForStrings;
size_t i, length = 4;
for (i = 0; i < length; i++) {
// copy some string to the buffer...
bufferForStrings = test[i];
vectorOfStrings.push_back(bufferForStrings);
}
for (auto s : vectorOfStrings) {
std::wcout << s << std::endl;
}
return 0;
}
此外,如果您稍后需要访问向量的元素作为 wchar_t*
指针,您可以使用每个元素的 c_str()
成员函数来检索这样的指针(尽管那将是 const
合格)。
还有其他方法,如果你想避免使用std::wstring
class;对于 'ordinary' char*
缓冲区,您可以使用 strdup()
function to create a copy of the current buffer, and send that to push_back()
. Unfortunately, the equivalent wcsdup()
function is not (yet) part of the standard library (though Microsoft and others 已经实现的)。