C99中,结构体中的最后一个元素允许是未知大小的数组,这就叫作柔性数组 。 柔性数组的特点: - 结构体中柔性数组成员前面必须至少有一个其他成员。
- sizeof返回的这种结构大小不包括柔性数组的内存。
- 包含柔性数组成员的结构用malloc()函数进行内存的动态分配。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _data
{
int len;
char val[];
}data_t;
int main(int arc, char *argv[])
{
data_t test_data1 = {0};
printf("sizeof(data_t) = %ld\n", sizeof(data_t));
char *src_data = "hello flexible arr";
// 为结构体及其柔性数组成员申请一块连续的空间
int len = strlen(src_data) + 1;
data_t *p_test_data2 =(data_t*)malloc(sizeof(data_t) + sizeof(char) * len);
if (NULL == p_test_data2)
{
printf("malloc p_test_data2 error\n");
return EXIT_FAILURE;
}
// 填充结构体
p_test_data2->len = len;
strncpy(p_test_data2->val, src_data, p_test_data2->len);
printf("p_test_data2->val = %s\n", p_test_data2->val);
// 释放内存
free(p_test_data2);
p_test_data2 = NULL;
return 0;
}
编译、运行:
|