资料合集下载链接:

​https://pan.quark.cn/s/472bbdfcd014​

在软件开发中,我们经常需要将一些可变的参数(如数据库地址、端口号、游戏角色属性等)与代码本身分离,方便日后修改而无需重新编译整个程序。这种存储配置信息的文件,我们称之为配置文件

一、 什么是配置文件?—— 键值对的艺术

配置文件本质上是一个纯文本文件,它遵循特定的格式来存储信息。最常见、最直观的格式就是“键值对”(Key-Value Pair)。

  • • 键 (Key): 也叫“索引”或“属性名”,用于唯一标识一个配置项。
  • • 值 (Value): 与键对应的数据。

让我们来看一个具体的例子,创建一个名为 ​​hero.conf​​ 的文件:

​hero.conf​​ 文件内容

# 英雄的基本信息配置
# 这是一个注释行,解析时应该被忽略HeroID = 101
HeroName = 盖伦
Attack = 95
Defense = 88# 英雄的背景故事,可以包含空格
Info = 一位来自德玛西亚的勇士,为了正义而战。

格式说明:

  1. 1. 键值对: ​​HeroName = 盖伦​​ 就是一个键值对,​​HeroName​​是键,​​盖伦​​是值,它们之间用 ​​=​​ 分隔。
  2. 2. 注释: 以 ​​#​​ 开头的行是注释,程序在解析时应当忽略它们。
  3. 3. 空行: 文件中的空行也应该被忽略。

我们的目标就是编写一个程序,能够读取这个文件,并能根据一个“键”(如 "HeroName")快速查找到对应的“值”("盖伦")。

二、 数据结构设计:如何安放我们的键值对?

要将文件中的数据加载到内存中,我们首先需要一个合适的数据结构来存放每一对键值。根据笔记的提示,一个结构体是完美的选择。

代码案例 1:设计 ​​ConfigInfo​​ 结构体

#include <stdio.h>#define MAX_SIZE 64 // 定义键和值的最大长度// 使用 typedef 方便后续使用
typedef struct {char key[MAX_SIZE];char value[MAX_SIZE];
} ConfigInfo;

这个 ​​ConfigInfo​​ 结构体非常直观,它包含两个字符数组成员:​​key​​ 和 ​​value​​,分别用于存储从配置文件中解析出来的键和值。​​MAX_SIZE​​ 宏定义了它们的最大长度,这里我们设置为64个字符,足以应对大多数场景。

三、 文件解析流程:两步走,稳准狠!

直接读取并解析文件可能会有些混乱。一个更清晰、更健壮的方法是采用“两步解析法”(Two-Pass Approach):

  1. 1. 第一遍扫描 (Pass 1): 遍历整个文件,只做一件事——统计有效配置项的数量。这样我们就能精确地知道需要分配多大的内存空间。
  2. 2. 第二遍扫描 (Pass 2): 再次从头读取文件,这次真正地解析每一行,将键值对填充到我们已经

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96487.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96487.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96487.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车机两分屏运行Unity制作的效果

目录 效果概述 实现原理 完整实现代码 实际车机集成注意事项 1. 显示系统集成 多屏显示API调用 代码示例&#xff08;AAOS副驾屏显示&#xff09; 2. 性能优化 GPU Instancing 其他优化技术 3. 输入处理 触控处理 物理按键处理 4. 安全规范 驾驶员侧限制 乘客侧…

vivo“空间计算-机器人”生态落下关键一子

出品 | 何玺排版 | 叶媛不出所料&#xff0c;vivo Vision热度很高。从21号下午发布到今天&#xff08;22号&#xff09;&#xff0c;大众围绕vivo Vision探索版展开了多方面的讨论&#xff0c;十分热烈。从讨论来看&#xff0c;大家现在的共识是&#xff0c;MR行业目前还处于起…

Azure TTS Importer:一键导入,将微软TTS语音接入你的阅读软件!

Azure TTS Importer&#xff1a;一键导入&#xff0c;将微软TTS语音接入你的阅读软件&#xff01; 文章来源&#xff1a;Poixe AI 厌倦了机械、生硬的文本朗读&#xff1f;想让你的阅读软件拥有自然流畅的AI语音&#xff1f;今天&#xff0c;我们将为您介绍一款强大且安全的开…

用过redis哪些数据类型?Redis String 类型的底层实现是什么?

Redis 数据类型有哪些&#xff1f; 详细可以查看&#xff1a;数据类型及其应用场景 基本数据类型&#xff1a; String&#xff1a;最常用的一种数据类型&#xff0c;String类型的值可以是字符串、数字或者二进制&#xff0c;但值最大不能超过512MB。一般用于 缓存和计数器 Ha…

大视协作码垛机:颠覆传统制造,开启智能工厂新纪元

在东三省某食品厂的深夜生产线上&#xff0c;码垛作业正有序进行&#xff0c;却不见人影——这不是魔法&#xff0c;而是大视协作码垛机器人带来的现实变革。在工业4.0浪潮席卷全球的今天&#xff0c;智能制造已成为企业生存与发展的必由之路。智能码垛环节作为产线的关键步骤&…

c# 保姆级分析继承详见问题 父类有一个列表对象,子类继承这个列表对象并对其进行修改后,将子类对象赋值给父类对象,父类对象是否能包含子类新增的内容?

文章目录 深入解析:父类与子类列表继承关系的终极指南 一、问题背景:从实际开发困惑说起 二、基础知识回顾:必备概念理解 2.1 继承的本质 2.2 引用类型 vs 值类型 2.3 多态的实现方式 三、核心问题分析:列表继承场景 3.1 基础代码示例 3.2 关键问题分解 3.3 结论验证 四、深…

tensorflow-gpu 2.7下的tensorboard与profiler插件版本问题

可行版本&#xff1a; python3.9.23cuda12.0tensorflow-gpu2.7.0tensorboard2.20.0 tensorboard-plugin-profile 2.4.0 问题描述&#xff1a; 1. 安装tensorboard后运行tensorboard --logdirlogs在网页中打开&#xff0c;发现profile模块无法显示&#xff0c;报错如下&#x…

数据结构青铜到王者第一话---数据结构基本常识(1)

目录 一、集合框架 1、什么是集合框架 2、集合框架的重要性 2.1开发中的使用 2.2笔试及面试题 3、背后涉及的数据结构以及算法 3.1什么是数据结构 3.2容器背后对应的数据结构 3.3相关java知识 3.4什么是算法 3.5如何学好数据结构以及算法 二、时间和空间复杂度 1、…

【Verilog】延时和时序检查

Verilog中延时和时序检查1. 延时模型1.1 分布延迟1.2 集总延迟1.3 路径延迟2. specify 语法2.1 指定路径延时基本路径延时边沿敏感路径延时状态依赖路径延时2.2 时序检查$setup, $hold, $setuphold$recovery, $removal, $recrem$width, $periodnotifier1. 延时模型 真实的逻辑元…

DigitalOcean Gradient AI平台现已支持OpenAI gpt-oss

OpenAI 的首批开源 GPT 模型&#xff08;200 亿和 1200 亿参数&#xff09;现已登陆 Gradient AI 平台。此次发布让开发者在构建 AI 应用时拥有更高的灵活度和更多选择&#xff0c;无论是快速原型还是大规模生产级智能体&#xff0c;都能轻松上手。新特性开源 GPT 模型&#xf…

藏在 K8s 幕后的记忆中枢(etcd)

目录1&#xff09;etcd 基本架构2&#xff09;etcd 的读写流程总览a&#xff09;一个读流程b&#xff09;一个写流程3&#xff09;k8s存储数据过程源码解读4&#xff09;watch 机制Informer 机制etcd watch机制etcd的watchableStore源码解读5&#xff09; k8s大规模集群时会存在…

腾讯云EdgeOne安全防护:快速上手,全面抵御Web攻击

为什么需要专业的安全防护&#xff1f; 在当今数字化时代&#xff0c;网站面临的安全威胁日益增多。据统计&#xff0c;2023年全球Web应用程序攻击超7千亿次&#xff0c;持续快速增长。 其中最常见的包括&#xff1a; DDoS攻击&#xff1a;通过海量请求使服务器瘫痪Web应用攻…

SpringBoot中的条件注解

文章目录前言什么是条件注解核心原理常用条件注解详解1. ConditionalOnClass和ConditionalOnMissingClass2. ConditionalOnBean和ConditionalOnMissingBean3. ConditionalOnProperty应用场景&#xff1a;多数据源配置在SpringBoot自动配置中的核心作用自动配置的工作原理经典自…

LightGBM时序预测详解:从原理到 PSO 参数优化

前言 在时间序列预测领域&#xff0c;集成学习方法一直占据重要地位。此前我们介绍了基于传统集成思想的时序预测方法&#xff08;查看前文&#xff09;&#xff0c;而梯度提升树&#xff08;GBDT&#xff09;作为集成学习的佼佼者&#xff0c;在时序预测中表现尤为突出。本文…

django生成迁移文件,执行生成到数据库

当报错时 重新拉取git&#xff0c;重新生成迁移文件&#xff0c;重新执行 1、生成迁移文件 python manage.py makemigrations 子应用2、执行建表、建字段、修改字段 python manage.py migrate 子应用3、当手动已经在数据库创建字段时&#xff0c; 用 --fake 标记迁移为 “已应用…

2025软件供应链安全技术路线未来趋势预测

软件供应链安全已从一个技术圈的议题演变为全球企业的治理焦点。近几年&#xff0c;APT渗透、恶意包植入、开发者误操作等不同类型的供应链安全事件频发&#xff0c;使得“安全的代码来源”和“可信的交付链路”成为企业数字化转型的生命线。2025年的软件供应链安全&#xff0c…

用户登录Token缓存Redis实践:提升SpringBoot应用性能

前言在现代Web应用中&#xff0c;用户认证和授权是至关重要的功能。传统的基于数据库的Token存储方式虽然简单易用&#xff0c;但在高并发场景下容易成为性能瓶颈。本文将介绍如何将SpringBoot项目中的用户Token从数据库存储迁移到Redis缓存&#xff0c;显著提升系统性能。一、…

深度解析Structured Outputs:让AI输出严格遵循JSON Schema的结构化响应

深度解析Structured Outputs&#xff1a;让AI输出严格遵循JSON Schema的结构化响应 引言 在现代应用开发中&#xff0c;JSON 是最流行的数据交换格式之一。为了提升 API 接口的健壮性和数据一致性&#xff0c;结构化输出&#xff08;Structured Outputs&#xff09;成为了大模…

关于 微服务中服务注册与发现 的详细说明,涵盖主流框架/解决方案的对比、核心功能、配置示例及总结表格

以下是关于 微服务中服务注册与发现 的详细说明&#xff0c;涵盖主流框架/解决方案的对比、核心功能、配置示例及总结表格&#xff1a;1. 服务注册与发现的核心概念 服务注册与发现是微服务架构的基础能力&#xff0c;主要解决以下问题&#xff1a; 服务注册&#xff1a;服务实…

08高级语言逻辑结构到汇编语言之逻辑结构转换 continue break 完结汇编按逻辑结构

目录 &#x1f4da; 1. continue 语句的原理与实现 &#x1f6e0; 1.1 continue 语句的基本概念 ⚙️ 1.2 底层原理 &#x1f4d6; 1.3 案例分析&#xff1a;跳过偶数&#xff0c;累加奇数 &#x1f680; 2. break 语句的原理与实现 &#x1f6e0; 2.1 break 语句的基本概…