当前位置: 首页 > news >正文

你必须知道的C语言问题(8)

问:如下结构体中为什么会出现零长度的数组,作用是什么?

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>#define FEMALE 0
#define MALE   1typedef struct _person{uint8_t age;uint8_t gender;char name[0];
}person_t;person_t * person_init(uint8_t age, uint8_t gender, char * name)
{uint32_t name_len;person_t * person;name_len = (uint32_t)strlen(name);person = malloc(sizeof(person_t) + name_len + 1);person->age = age;person->gender = gender;strcpy((char *)person->name, name);return person;
}int main(int argc, char* argv[])
{person_t * person;person = person_init(24, MALE, "xiao wang");printf("name: %s\r\nage: %d\r\ngender: %s\r\n", person->name, person->age, person->gender ? "male" : "female");return 0;
}

答:由于人名长度不定,person_t结构体不好分配固定大小的内存,结构体中零长度的数组本身不占大小,仅仅是一个符号,表示前一个成员之后的地址,实例化时可以根据name的长度分配合适的内存,分配内存后零长度数组name就成为了一个真正的数组,数组大小就是多分配出来的内存,实现了一个可变长度的结构体。


http://www.mrgr.cn/news/19920.html

相关文章:

  • 赶紧码住!8款AI智能论文生成系统,毕业论文编写不难!
  • 基于RT的服务健康状况探测的时间间隔选择问题
  • Spring1~~~
  • 2024 年 Python 学习路线推荐,附学习书籍,学习视频(建议收藏)
  • turbovnc 服务端、客户端安装
  • 2024.9.4
  • 火狐浏览器设置秘籍:让https协议下的ws不加密时运行无阻(WebSocket connection HTTPS)
  • 【Java】ApiPost请求返回 `406` 状态码(jackson)
  • STM32 SPI
  • 【电感】基础知识
  • 35.搜索插入位置
  • JSON Hero:视图查看更简单!!【送源码】
  • 【高等代数笔记】(18)N阶行列式
  • Linux教程8:文本编辑命令vi
  • 【JAVA】第三天
  • Java-互斥锁死锁释放锁
  • Leetcode—72. 编辑距离【中等】
  • 【IPV6从入门到起飞】3-域名解析动态IPV6(阿里云)
  • 栈和队列——用栈实现队列
  • Python使用turtle画笑脸