在函数之间来回传递char *

时间:2013-12-13 21:02:07

标签: c++ c

我有两个函数,我正在尝试将缓冲区从一个函数传递到另一个函数并让它修改内容,但我似乎无法让它工作......我有什么:

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”包含垃圾。

为什么会发生这种情况以及如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:2)

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

您不会修改buf中的populate。你没有为datump分配内存(不知道getData做了什么)。

答案 1 :(得分:2)

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

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

...然后你这样称呼它:

char * datum = populate()

您当前的代码不起作用,因为您在值和参考参数之间感到困惑。您通过引用'{1}}传递数据,但`populate将其视为值参数。

答案 2 :(得分:1)

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