void callback(const unsigned char* data, int len) {
unsigned char copydatahere;
}
data是指向const的指针,在外部库中分配 . len是一个数据大小,猜测它是sizeof(unsigned char)* N.
我如何将 copydatahere
分配给 len
的大小并复制 data
后面的整个内存,包括空字节,字符串终止字符和其他任何具有字节表示的字符串?在这种情况下,bcopy和memcpy之间有什么区别?
另外: memcpy(pointer+offset, sourcedata, size);
's how you can do ' memcpy附加'伙计们 . 谢谢你们!
4 回答
使用
memcpy
.bcopy
仅在某些平台上受支持,并且在较新的标准中已弃用 .与malloc(3)分配,与free(3)一起发布 . bcopy(3),虽然弃用(所以更喜欢memmove(3)),处理重叠的内存区域,
memcpy(3)
没有 .通常这种回调函数的第二个参数是一些无符号类型,如
unsigned int
或size_t
. 因此我添加了assert
,以确保不存在任何未定义的行为 .memcpy
在C标准中定义明确,而bcopy
是旧版本,不保证存在甚至按预期工作 . (虽然通常如果它存在,它会做你期望的 . )只需创建一个数组
如果
len
可以任意大(比如400万),那么最好使用malloc
,因为它可以告诉你分配是否成功(虽然某些配置中的某些操作系统会骗你,告诉你有足够的内存可用,当你试图访问它时,只会在以后崩溃) . 如果上面的数组分配失败,则行为未定义 .但是,并非所有编译都支持具有可变大小的数组 .