柔性数组例子
程序员文章站
2022-03-15 21:16:07
...
柔性数组例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct player {
int id;
int age;
char name[];
};
int main () {
// 柔性数组,结构中的最后一个元素为可变长数组,定义为[]或[0]
// 只作为标识占位符,在sizeof()统计长度时不被计算其中
// 含有柔性数组的结构,通常只能在堆上生成
// error:
// struct player me;
// me.name = malloc(sizeof(char) * 16); // 错误
// 相比在结构中放指针,柔性数组与原结构存储在同一块内存
// 方便管理,既可以直接拷贝整个结构,也可以直接偏移访问,直接free。
//
// 柔性数组,常用于网络编程。
struct player *p = malloc(sizeof(*p) + sizeof(char) * 16);
printf("%ld ", sizeof(*p));
strcpy(p->name, "zhou");
printf("%s\n", p->name);
return 0;
}