如何将 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?
考虑下面的代码,它将输入字符串作为源传递,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;
}
相关文章:
- 如何从 std::atomic 中提取指针 T<T>?
- std::vector::迭代器是否可以合法地作为指针
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- 如何使用 std::make_shared 创建基类类型的智能指针?
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- 编译器不会使用 -std=c++11 编译智能指针
- 我无法使用C++指针指向类方法返回的 std::vector
- std::byte 指针应该用于指针算术吗?
- std::unordered_map::提取引用/指针失效
- 在 c++ 中生成字符串到 std::指针列表的映射
- 通过线程共享 std::指针的矢量
- 将STD ::指针列表与比较器的对象列表
- std::指针和remove_if列表
- 调用具有const键类型引用的std::指针集的count方法
- 搜索指向类的std::指针集
- const传播到std::指针数组
- c++使用std::指针列表对std::vector元素重新排序
- 返回指向std::指针列表的指针时发生ImplicitCast_错误