在函数之间来回传递char*
passing char* back and forth between functions
我有两个函数,我试图将缓冲区从一个函数传递到另一个函数,并让它修改内容,但我似乎无法让它工作。。这是我的
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长。不过,我怀疑这是你的实际错误。
相关文章:
- 将char*传递给pthread_read函数
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 从函数返回const char*数组
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 将函数参数"const char*"转换为"std::string_view"是
- std::string 构造函数如何处理固定大小的 char[]?
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 构造函数 (C++) 中的 char 指针参数存在问题
- c ++ 如何在构造函数中初始化 char
- C++ 存储来自 char* 函数的字符列表
- 从循环返回char函数数据
- 预处理器检查 constexpr const char* 函数
- 如何使const char*函数起作用
- 返回一个带有随机选项和局部变量的 char 函数
- System::字符串到char*函数.内存泄漏
- 如何在c++中使用递归char *函数来反转字符串
- 如何在c++中创建一个char函数
- Windows与UTF-16一起使用char*函数
- c++在char函数中搜索char