memcpy拷贝结构体,字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define print_IPaddr "%d,%d,%d,%d"
#define IPaddr(a) a[0],a[1],a[2],a[3]
typedef struct {
unsigned char data_len;
char *data_p;
unsigned char addr[4];
} *PMessage_Header, Message_Header;
int main() {
Message_Header a = {
.data_len = 55,
.data_p = "hello world",
.addr = { 127, 0, 0, 1 }
};
PMessage_Header b = (PMessage_Header)malloc(sizeof(Message_Header));
char c[50] = {0};
strcpy(c, "What is correct?");
printf("c = %s\n", c);
memcpy(b, &a, sizeof(Message_Header));
printf("a.data_len = %d\n", a.data_len);
a.data_p = (char *)malloc(20); //一定要先给个存储空间
memcpy(a.data_p + 3, &c[12], strlen(c)); //地址后面的数字随便写的,如果没有初始化,应该就会有乱码
printf("a.data_p = %s\n", a.data_p);
printf("a.addr = "print_IPaddr"\n", IPaddr(a.addr) );
printf("b->data_len = %d\n", b->data_len);
b->data_p = (char *)malloc(strlen(c) + 1);
memcpy(b->data_p, c, strlen(c) + 1);
printf("b->data_p = %s\n", b->data_p);
printf("b->addr = "print_IPaddr"\n", IPaddr(b->addr) );
free(b);
}
结果如下:
c = What is correct?
a.data_len = 55
a.data_p = P秂ct?
a.addr = 127,0,0,1
b->data_len = 55
b->data_p = What is correct?
b->addr = 127,0,0,1