我有两个函数,我试图将一个缓冲区从一个函数传递到另一个函数并让它修改内容,但我似乎无法让它工作。这就是我所拥有的:
void caller ()
{
char * datum;
populate (&datum);
}
void populate (void * buf)
{
unsigned char * datump;
int dtsz;
getData (datump,dtsz); // This function puts "001" in datump and dtsz = 4
buf = new unsigned char[dtsz];
memset(datumbuf,0,sizeof(buf));
memcpy (buf,datump,dtsz);
}
当我调试时,一切似乎都完全一样,直到我到达 memcpy。看起来 memcpy 实际上没有做任何事情。 "datumbuf = new unsigned char[dtsz]"完成的原因是因为 "getData()"函数每次返回不同的大小,具体取决于数据大小,因此不能静态分配大小。
当我回到主要的“caller()”函数时,“数据”包含垃圾。
知道为什么会发生这种情况以及如何解决它吗?
谢谢
最佳答案
它不是 C++,它是 C。如果您使用的是 C++,请使用 std::string
并忘记此类缓冲区。
您不要在populate
中修改buf
。你没有为 datump 分配内存(不知道 getData 做了什么)。
关于c++ - 在函数之间来回传递 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20575931/