结构体的不定长数组,用起来就是这么爽

这篇具有很好参考价值的文章主要介绍了结构体的不定长数组,用起来就是这么爽。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

结构体的不定长数组

结构体数组不定长的做法,有两种
第一种: 指针
第二种:长度为0的数组

1. 结构体的数组指针

特点

  1. 结构体初始化时,可以是结构体指针,如struct tag_info *pInfo = NULL; 也可以是结构体变量, 如 struct tag_info Info = {‘\0’};
  2. 使用结构体里面的指针时,必须申请内存,进行初始化

2. 结构体长度为0的数组

特点

  1. 结构体初始化时,必须是结构体指针;
  2. 长度为0的数组必须是放在结构体的最末尾
  3. 不占用结构体的大小,即sizeof结构体不包含buf[0]的大小

3. 结构体长度为0的数组

3.1 结构体如下定义:
typedef struct tag_info
{
	int size;
	int nums;
	char buf[0];
}Info_t;
3.2 结构体初始化:
Info_t *pinfo = (Info_t*)calloc(1, sizeof(Info_t)+128);

	if(pinfo == NULL)
	{
		printf("calloc for info.buf failed\r\n");
		return -1;
	}

	pinfo->size = 128;  // 128 为 buf[0]的长度
	pinfo->nums = 1;

4. 完整例子

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>

typedef struct tag_info
{
	int size;
	int nums;
	char buf[0];
}Info_t;


int main(int argc, char const argv[])
{
	Info_t *pinfo = (Info_t*)calloc(1, sizeof(Info_t)+128);

	if(pinfo == NULL)
	{
		printf("calloc for info.buf failed\r\n");
		return -1;
	}

	pinfo->size = 128;
	pinfo->nums = 1;

	memset(pinfo->buf, '\0', pinfo->size);
	snprintf(pinfo->buf, pinfo->size, "hello world\r\n");

	printf("pinfo->buf: %s\r\n", pinfo->buf);


	free(pinfo);
	pinfo = NULL;
	
	return 0;

}

5. 例子结果

不定长结构体数组,C,Linux,数据结构,c++,算法文章来源地址https://www.toymoban.com/news/detail-599329.html

到了这里,关于结构体的不定长数组,用起来就是这么爽的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [数据结构 -- C语言] 堆(Heap),你小子就是堆,看我如何透彻的将你拿捏

    目录 1、堆的概念及结构 1.1 概念(概念总是重要的) 1.2 结构,分为两种 1.2.1 小堆/小根堆示例 1.2.2 大堆/大根堆示例 2、堆的接口 3、接口实现 3.1 堆的初始化 3.2 堆的销毁 3.3 堆的插入 功能分析: 功能实现: 3.4 堆的删除 功能分析: 功能实现: 3.5 取堆顶的数据 3.6 堆的数据

    2024年02月07日
    浏览(38)
  • 【数据结构】之十分好用的“链表”赶紧学起来!(第一部分单向链表)

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 前言 🎸小伙伴们,

    2024年02月14日
    浏览(35)
  • 就是这么简单,Selenium StaleElementReferenceException 异常分析与解决

    简介 Selenium 是一个流行的自动化测试工具,用于模拟用户与网页交互。然而,当我们在使用 Selenium 时,可能会遇到一个常见的异常,即 StaleElementReferenceException 。这个异常通常在我们尝试与网页上的元素交互时抛出,可能会导致我们的自动化测试脚本运行失败。本文将深入探

    2024年04月14日
    浏览(29)
  • 使用Docker将Python项目容器化,就是这么简单

    Docker 化您的 Python 应用程序 微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩 这是一个关于 dockerizing python 应用程序的简单教程。 Docker 和 Python——完美的团队 Docker 是一个容器化框架,允许您在任何环境中部署和运行应用程序以及操作系统代码。可以把它想象

    2024年02月03日
    浏览(50)
  • 3秒钟接入讯飞星火AI大模型就是这么快(Java版)

    https://xinghuo.xfyun.cn/ https://xinghuo.xfyun.cn/sparkapi 随便填 https://console.xfyun.cn/services/bm3 目录 1、注册讯飞星火账号 2、领取token 2.1把3.0和1.5的套餐都领了 2.2、 领取的时候创建应用 2.3、选择创建的应用,拉到最下面下单购买 2.4购买成功后可以查看购买的key信息 一会要用 3、开始部

    2024年04月10日
    浏览(64)
  • 数据结构——线性数据结构(数组,链表,栈,队列)

    数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。 数组的特点是: 提供随机访问 并且容量有限。 2.1. 链表简介 链表(LinkedList) 虽然是

    2024年02月11日
    浏览(33)
  • 线性数据结构:数组、受限数组(栈、队列)、线性表

      数组(Array)是有序的元素序列。属于线性结构(有且仅有一个前驱、有且仅有一个后继)。   数组的关键在于在内存中的物理地址对应的是 一段连续的内存 。这意味着如果想要在任意位置删除/新增一个元素,那么该位置往后的所有元素,都需要往前挪/往后挪一个位

    2024年03月09日
    浏览(42)
  • 数据结构<1>——树状数组

    前言:树状数组能解决的问题线段树一定可以解决。然后关于线段树的内容会在2中讲解。 树状数组,也叫Fenwick Tree和BIT(Binary Indexed Tree),是一种支持 单点修改 和 区间查询 的,代码量小的数据结构。 那神马是单点修改和区间查询?我们来看一道题。 洛谷P3374(模板): 在本题中

    2024年01月25日
    浏览(51)
  • 数据结构(一)—— 数组

    数组是存放在连续内存空间上的相同类型数据的集合 ,也就是说数组 内存空间的地址 是连续的。 因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址,注意:数组的元素是不能删的,只能覆盖。 1、数组初始化分配内

    2023年04月22日
    浏览(24)
  • 数据结构---数组

    1. 存放一组 相同 数据类型的集合 2.在内存中,分配连续的空间,数组创建时要 指定大小 3. 定义    数据类型 [] 数组名 4. 获取数组的长度 5.获取数组中指定位置的元素 6.修改数组中指定位置的元素 7.数组排序 8.遍历数组 9.索引从 0 开始,最大为 数组长度-1 10.访问数组中元素需

    2024年01月22日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包