#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
typedef struct temp{
int len;
int data[0];
};
typedef struct temp* sp;
typedef struct _student
{
int id;
int age;
}student_st;
typedef struct _student* student;
int main(int argc, char** argv)
{
sp _sp = NULL;
student stu = (student_st *)malloc(sizeof(student_st));
stu->id = 100;
stu->age = 23;
student tmp = NULL;
_sp = (struct temp*)malloc(sizeof(struct temp) + sizeof(student_st));
if (_sp == NULL)
{
printf("malloc memory failed\r\n");
return -1;
}
memset(_sp, 0, sizeof(struct temp) + sizeof(student_st));
_sp->len = sizeof(student_st);
memcpy(_sp->data,stu,_sp->len);
printf("buff1 address:%p,buff1->data_len address:%p,buff1->data address:%p\n", _sp, &(_sp->len), _sp->data);
tmp = (student_st*)(_sp->data);
printf("_sp->data addr %p,id addr is:%p,id is:%d,age addr is:%p, id is:%d\r\n", _sp->data, &tmp->id, tmp->id, &tmp->age, tmp->age);
free(_sp);
_sp = (struct temp*)malloc(sizeof(struct temp) + 10 * sizeof(int));
memset(_sp, 0, sizeof(struct temp) + 10 * sizeof(int));
_sp->len = 10;
for (int i = 0; i < 10; i++)
{
_sp->data[i] = i;
}
for (int i = 0; i < 10; i++)
{
printf("%d\r\n", _sp->data[i]);
}
free(_sp);
return 0;
}
参考链接 : https://www.cnblogs.com/Anker/p/3744127.html