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;
- }
编译、运行:
|