我正在尝试分配一块内存,然后将数据复制到该空间。我做了这个简单的程序,但它并没有达到我的预期。有人可以指出我的错误推理。

谢谢。

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int t1 = 11;
int t2 = 22;
int *bufptr;

bufptr = calloc(2, sizeof(int));
if(bufptr == NULL)
{
    fprintf(stderr, "Out of memory, exiting\n");
    exit(1);
}

memcpy(bufptr, &t1, sizeof(int));
memcpy((bufptr+sizeof(int)), &t2, sizeof(int));

printf("bufptr11: %d\n", *bufptr);
printf("bufptr22: %d\n", *bufptr+sizeof(int));
}

它输出的内容如下:
bufptr11:11
bufptr22:15(应该为22而不是15)

感谢大家的帮助,但我遇到了下一个麻烦!
该练习的全部目的是通过udp将数据发送到另一台主机。在调用sendto()之前,我先查看了bufptr的内容,一切看起来都很好,并且发送似乎顺利进行。另一方面(我在127.0.0.1上运行客户端/服务器)我只收到“废话”。我叫recvfrom(s_fd,bufptr,buflen等)。我使用相同的calloc调用为bufptr分配内存。此调用返回的数据量适中,但其内容全都是垃圾!
bufptr = calloc(2, sizeof(int));
if(bufptr == NULL)
{
   fprintf(stderr, "Out of memory, exiting\n");
   exit(1);
}

buflen = 2*sizeof(int);

rc = recvfrom(sd, bufptr, buflen, 0, (struct sockaddr *)&serveraddr, &serveraddrlen);
printf("t2: %d\n", *bufptr);
printf("t3: %d\n", *(bufptr+1));

最佳答案

试试这些:

memcpy(bufptr, &t1, sizeof(int)); // copy 11 into the first element of the array.
memcpy(bufptr+1, &t2, sizeof(int)); // bufptr+1 will point to the next int of the array.

printf("bufptr11: %d\n", *bufptr);
printf("bufptr22: %d\n", *(bufptr+1)); // parenthesis needed as * has higher precedence than +

07-24 13:55