c++ - 如何将 std::string 与采用 char[] 缓冲区的 Win32 函数混合?

标签 c++ string stl winapi

有许多 Win32 函数获取缓冲区的地址,例如 TCHAR[256],并将一些数据写入该缓冲区。它可能小于缓冲区的大小,也可能是整个缓冲区。

您通常会在循环中调用它,例如从流或管道中读取数据。最后,我想有效地返回一个字符串,该字符串具有来自所有迭代调用的完整数据以检索此数据。我一直在考虑使用 std::string,因为它的 += 以类似于 Java 或 C# 的 StringBuffer.append()/StringBuilder.Append 的方式进行了优化() 方法,有利于速度而不是内存。

但我不确定如何最好地将 std::string 与 Win32 函数混合在一起,因为这些函数以 char[] 开头。有什么建议吗?

最佳答案

如果参数是input-only 使用std::string像这样

std::string text("Hello");
w32function(text.c_str());

如果参数是输入/输出,使用std::vector<char>而是像这样:

std::string input("input");
std::vector<char> input_vec(input.begin(), input.end());
input_vec.push_back('\0');
w32function(&input_vec[0], input_vec.size());
// Now, if you want std::string again, just make one from that vector:
std::string output(&input_vec[0]);

如果参数是仅输出也使用std::vector<Type>像这样:

// allocates _at least_ 1k and sets those to 0
std::vector<unsigned char> buffer(1024, 0);
w32function(&buffer[0], buffer.size());
// use 'buffer' vector now as you see fit

您还可以使用 std::basic_string<TCHAR>std::vector<TCHAR>如果需要的话。

您可以在 Scott Meyers 所著的 Effective STL 一书中阅读有关该主题的更多信息。

关于c++ - 如何将 std::string 与采用 char[] 缓冲区的 Win32 函数混合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2057946/

相关文章:

c++ - 使用指针数组中的对象调用重载的 friend ostream 插入运算符返回内存地址

c - 递归地反转C中的数组

c++ - 使用 std::stack 而不是 deque、vector 或 list 的优点和缺点是什么

C++设计: Given a list of scores of students,按顺序获取分数频率

c++ - 如何概括调用 C++ 中的函数列表?

c++ - 为什么 llvm::SmallVector 拆分它的存储?

c++ - 如何使用boost库创建分布式属性映射?

c - C++中复制字符串的函数选择,注重性能

java - 更快的字符串排列

c++ - 如何 self 复制一个 vector ?