我有一个函数,它接受一个void * buffer作为参数,并且必须将它传递给另一个带有unsigned char *的函数。这是一系列事件:
unsigned char data[4];
populate(&data);
void populate (void * buf)
{
...
unsigned char * datump = ((unsigned char * )buf);
if ( Unwrap(datump) )
{...}
}
bool Unwrap (unsigned char* buf)
{
...
}
当我继续执行:Unwrap((unsigned char *)buf)时,它失败并且“没有匹配函数调用Unwrap [(unsigned char *)。 但是如果我在代码中使用像我一样的转换它就可以了!那是为什么?
问题是现在我必须做一些事情(请帮忙!)将数据从unsigned char *复制到void *。
非常感谢任何帮助。
答案 0 :(得分:1)
也许您应该在使用之前声明Unwrap
。 data
是数组的地址,&data[0]
是第一个元素的地址。它是平等但具有不同的含义。
答案 1 :(得分:1)
请注意,当你这样做时
unsigned char data[4];
populate(&data);
您正在将char**
传递给populate
。当您尝试进行转换时,这会导致无法解决的问题(除了您指向内存中的某个随机位置之外)。
要修复的第一部分:
populate(data);
以下非常简单的代码编译并运行得很好:
#include <iostream>
bool f1(unsigned char* buf) {
return true;
}
void populate(void *buf) {
unsigned char* datump = (unsigned char*) buf;
if(f1(datump)) std::cout << "it's true!" << std::endl;
}
int main(void) {
unsigned char data[4];
populate(data);
}
似乎只需要修复指针即可?