在函数之间来回传递char*

passing char* back and forth between functions

本文关键字:char 函数 之间      更新时间:2023-10-16

我有两个函数,我试图将缓冲区从一个函数传递到另一个函数,并让它修改内容,但我似乎无法让它工作。。这是我的

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()"函数时,"datum"包含垃圾。

你知道为什么会发生这种情况以及如何解决吗?

感谢

它不是C++,而是C。如果使用C++,请使用std::string并忘记这些缓冲区。

不能在populate中修改buf。您不为datump分配内存(不知道getData做什么)。

您的populate函数应该只返回一个指针。这样一切都容易多了。

char * populate()
{
  ...
  buf = new unsigned char[dtsz];
  ...
  return buf;
}

然后你这样称呼它:

char * datum = populate()

您当前的代码不起作用,因为您混淆了value和reference参数。通过引用传递数据populate(&datum),但"populate"将其视为值参数。

该memset行奇怪且错误,sizeof(datumbuf)是指针大小(4或8),而不是数组长度。如果是8,它将覆盖其他内容,因为您描述的数组只有4长。不过,我怀疑这是你的实际错误。