c++ - 安全使用在指针后写入数据的函数

标签 c++ pointers

我有一个函数 foo(void* buffer, size_t len) 可以根据 buffer 中的数据(大小为 len)计算哈希值) 并将其附加到 buffer 的末尾。

通常我有一个 vector ,我会传递给 foo(&myVec[0], myVec.size())

我如何安全地将此函数与 vector 一起使用?在传递之前调整它的大小?

void foo(void* buffer, size_t len)
{
 if(buffer == NULL)
 { 
  printf("Error\n");
  return;
 }
 std::vector<unsigned char> hash(128);
 gethash(buffer, len, &hash[0]);
 unsigned char *data = ((unsigned char*) buffer) + len;
 memcpy(data, &hash[0], hash.size());

}

最佳答案

假设 vector 是 vector<char> ,你可以避免所有的困惑并做:

 void foo(vector<char>& buffer)
 {
      std::vector<unsigned char> hash(128);
      gethash(buffer.data(), buffer.size(), hash.data());
      buffer.resize(buffer.size()+hash.size();
      unsigned char *data = buffer.data() + buffer.size();
      memcpy(data, hash.data(), hash.size());
 }

这仍然有点“困惑”,但比您发布的代码少了很多。

正如评论中所建议的那样:

     buffer.insert(buffer.end(), hash.begin(), hash.end());

可能比我写的最后三行要好。

关于c++ - 安全使用在指针后写入数据的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25399111/

相关文章:

Javascript:将函数指针放入对象中?

c++ - C/C++ 常量

c++ - 简单 Qt C++ 应用程序中的链接器错误

c++ - 显示没有总和的迭代数字

检查以下代码。它与指向数组概念的指针有关

c++ - 指向成员函数错误的指针

c++ - 继承和覆盖 std::string 的函数?

c++ - 有没有办法获取传递给函数的数组的大小?

c - C中输入三个整数的函数

c++ - 是否可以将对指针的引用从 Excel VBA 传递到 C++?