是否可以将 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 已经实现的)。