我有一个函数 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/