如何将 std::string 赋回作为 <char>void* 指针传递的 std::vector.data()?

How to assign a std::string back to a std::vector<char>.data() passed as a void* pointer?

本文关键字:std 指针 vector data void gt string char lt      更新时间:2023-10-16

考虑下面的代码,它将输入字符串作为源传递,void*filter()函数传递,并将vector<char>作为目标void*

如何将处理后的字符串分配回目标void*以便可以将其传递回main()

size_t filter(void* destination, const void* source, size_t source_size)
{
std::string source_string(static_cast<const char*>(source));
std::string destination_string;
// Do some processing on destination_string
// HAS NO EFFECT ????????????????????
destination = (&destination_string);
return destination_string.size();
}
int main()
{
std::vector<char> buffer;
buffer.reserve(100);
auto return_size = filter(buffer.data(), "Appollo", 7);
std::string str(buffer.begin(), buffer.begin()+return_size);
std::cout << str.c_str();
}

附言这是在线编码挑战的问题。

语句destination = (&destination_string)简单地将局部std::string变量的内存地址分配给也是函数本地的指针。它根本不会将字符数据复制到调用方的缓冲区中。

尝试更多类似的东西:

size_t filter(void* destination, size_t destination_size, const void* source, size_t source_size)
{
std::string source_string(static_cast<const char*>(source), source_size);
std::string destination_string;
// Do some processing on destination_string
auto size = std::min(destination_string.size(), destination_size);
std::copy_n(destination_string.begin(), size, static_cast<char*>(destination));
return size;
}
int main()
{
std::vector<char> buffer;
buffer.resize(100);
auto return_size = filter(buffer.data(), buffer.size(), "Appollo", 7);
std::string str(buffer.data(), return_size);
std::cout << str;
return 0;
}