【发布时间】:2020-06-17 00:47:39
【问题描述】:
我今天的问题是关于 Qt 和 memcpy() 函数。 我有一个 QByteArray i_byte_array 包含我需要的原始数据。我尝试的第一件事是将这些数据复制到 char* l_array 中。 这给了我:
void blablafunctionblabla(const QByteArray& i_byte_array)
{
char* l_array = (char*)malloc(i_byte_array.size());
memcpy(l_array, i_byte_array, i_byte_array.size());
// OR: char* l_array = i_byte_array.data(); // same result
}
当我运行代码时,我希望复制 i_byte_array 的全部内容,即: i_byte_array values
结果我只得到了这个......: l_array value
复制似乎在第一个 /0 处停止,忽略了我要求他复制的大小..
所以我的问题是为什么 memcpy 函数会发生这种情况?为了复制所有原始数据,我需要如何进行? (甚至 /0 这对我来说是有用的数据)
【问题讨论】:
-
char* l_array = i_byte_array.data();并没有真正复制任何东西,除了这里的指针 -
memcpy(l_array, i_byte_array.data(), i_byte_array.size());
-
作为 C++ 程序员,您不应该立即使用
C函数,例如malloc和memcpy-- 使用std::copy并使用memcpy的参数不会已编译,从而防止您在运行时犯此错误。另外,当您的数据已经位于i_byte_array中时,想要创建另一个缓冲区的原因是什么? -
@BigTemp :是的,你说得对,对不起。但即使在这里,在 \0 之后我也没有得到其他值。我认为 memcpy() 并不关心这个角色。
-
@pm100 : 谢谢你的回答,我试试你说的但结果一样:/