C - Memcpy两个int到单个Void指针

时间:2016-10-26 06:32:24

标签: c pointers void

我正在尝试将两个整数复制到一个void指针中,并且能够访问它们,到目前为止还没有运气。

void *buffer;
buffer = malloc (sizeof(int) + sizeof(int))
memcpy (&buffer, &int1, sizeof(int));
memcpy (&buffer + sizeof(int), &int2, sizeof(int));
printf ("%d", *(int*)buffer);

打印时,我得到的只是前4个字节中的值。任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:3)

您正在复制指针的指针。

更改这两行:

memcpy (&buffer, &int1, sizeof(int));
memcpy (&buffer + sizeof(int), &int2, sizeof(int));

要成为这样:

memcpy (buffer, &int1, sizeof(int));
memcpy (buffer + sizeof(int), &int2, sizeof(int));

更好的形式:

void* buffer = malloc(sizeof(int) * 2);
int* intbuffer = (int*)buffer;

memcpy(intbuffer, &int1, sizeof(int));
memcpy(intbuffer+1, &int2, sizeof(int));

你甚至可以完全避免使用memcpy:

void* buffer = malloc(sizeof(int) * 2);
int* intbuffer = (int*)buffer;

intbuffer[0] = int1;
intbuffer[1] = int2;

相应的printf("%d", *(int*)buffer);适用于上述所有三个示例。

答案 1 :(得分:1)

这里的主要问题是这部分

memcpy (&buffer, ...);
//      ^

首先,如果你想要一个“数组”或int,为什么不使用指针int?您可以随后将其转换为通用void *。这将解决一个问题,这是您在第二次memcpy调用中尝试执行的指针算法。

回到我突出显示的部分,使用buffer的address-of运算符错误并传递指向变量 {{1存储,而不是buffer指向的地址。删除那里的地址操作员。

总结一下:

buffer

对于您的打印,您只需告诉int *int_buffer = malloc(sizeof *int_buffer * 2); memcpy(int_buffer, &int1, sizeof int1); // or &int_buffer[0] memcpy(int_buffer + 1, &int2, sizeof int2); // or &int_buffer[1] void *buffer = int_buffer; 打印第一个printf元素。如果您要打印int个元素,则需要告诉int这样做。