我正在尝试分配一块内存,然后将数据复制到该空间中。我做了这个简单的程序,但它并没有做我期望的事情。有人可以指出我的错误推理。
谢谢。
#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));