std::vector、字符 * 和 C API

std::vector, char *, and C API

我想使用一些需要 char 缓冲区的 C API,我正在考虑使用 std::vector 作为支持缓冲区。我现在的想法是

下面的代码概述了这个想法:

int main(){
  auto required_size = get_required_buffer_size();

  auto buffer = std::vector<char>{};
  buffer.resize(required_size);

  auto read_size = read_data(std::data(buffer), buffer.capacity());
  buffer.resize(read_size);
}

这是 std::vector 的正确用法,还是我搬起石头砸自己的脚?

编辑:将 reserve 更改为 resize,因为最后一个 resize 将覆盖 read_data

写入的数据

你所拥有的非常接近,但它可以使用一些细微的变化:

auto buffer = std::vector<char>{};
buffer.resize(required_size);

可以减少到

std::vector<char> buffer(required_size);

并且buffer.capacity()需要是required_sizebuffer.size()

int main(){
  auto required_size = get_required_buffer_size();

  std::vector<char> buffer(required_size);

  auto read_size = read_data(buffer.data(), buffer.size());
  buffer.resize(read_size);
}

也就是说,在需要 char[] 缓冲区的情况下,我更喜欢使用 std::string 代替:

int main(){
  auto required_size = get_required_buffer_size();

  std::string buffer(required_size, '[=13=]');

  auto read_size = read_data(buffer.data()/*or: &buffer[0]*/, buffer.size());
  buffer.resize(read_size);
}