所以我有一个问题,我连续两个晚上连续敲打:
(tuple1和tuple2是传递给此函数的void指针)
char *data;
data = (char*) calloc (76, 1);
memcpy(data, tuple1, 32);
memcpy(data+32, tuple2, 44);
想法是分配内存等于tuple1
和tuple2
(tuple1
为32个字节,tuple2
为44)的大小总和,然后复制32个字节tuple1
并将它们粘贴到数据地址,然后复制44个字节的tuple2
并将它们粘贴到数据地址后的32个字节。
问题是如果我只复制tuple1
或仅复制tuple2
它真的被复制到应该的位置(我打印的数据太长了,无法放到这里),但是当我做两个内存副本第一个memcpy()
工作正常,但第二个没有。
任何人都可以帮我解决这个严重的问题吗?
答案 0 :(得分:1)
我怀疑对齐和/或填充问题,tuple1
和tuple2
的类型声明是什么?
你怎么知道它们的确切尺寸?硬编码事物的代码是可疑的,应该使用sizeof
而不是幻数字文字。
此外,您不应在C。
中转换calloc()
的返回值
答案 1 :(得分:1)
开始使用更小的东西进行实验,这样更容易调试:
void* tuple1 = calloc(2, 1);
char* content1 = "ab";
memcpy(tuple1, content1, 2);
void* tuple2 = calloc(4, 1);
char* content2 = "cdef";;
memcpy(tuple2, content2, 4);
char *data = data = (char*) calloc (6, 1);
memcpy(data, tuple1, 2);
memcpy(data+2, tuple2, 4);
printf("%.*s\n", 6, data); // should print: abcdef