实现经常使用的配置文件/初始化文件读取的一个C程序[通俗易懂]

实现经常使用的配置文件/初始化文件读取的一个C程序

大家好,又见面了,我是全栈君。

      在编程中,我们常常会遇到一些配置文件或初始化文件。

这些文件通常后缀名为.ini或者.conf。能够直接用记事本打开。里面会存储一些程序參数,在程序中直接读取使用。比如,计算机与server通信。server的ip地址,段口号能够存储于ini文件里。这样假设我想换另外一台server时。直接将ini文件里的ip地址改变就可以。程序源码不须要做不论什么改动。

本文将分享一段经常使用代码,用于读取配置文件里的信息。

本文中的代码为C语言编写,在ubuntu 12.04 linux系统中调试没有问题。详细操作例如以下:

1. 首先用记事本创建一个config.ini文件(文件名称能够随便取)。并如果该文件是我们要读取的配置文件。文件内容例如以下:

information1: 1234567890 information2: this is test information information3: `~!@#$%^&*()_+{}-[]\|:"/.,<>

如果我们读取的初始化文件每一行都是  <属性名称>: <属性值>  的格式。

在上述样例中,文件共同拥有三行,分别代表三个属性的信息。

2. 然后就是我们的代码文件了,例如以下(将下面代码存在ReadFile.cpp中):

复制代码
#include <string.h> #include <stdio.h>

const size_t MAX_LEN = 128; typedef struct{ char firstline[MAX_LEN]; char secondline[MAX_LEN]; char thirdline[MAX_LEN]; } Data; void readfile(Data *d){ const char *FileName = "config.ini"; char LineBuf[MAX_LEN]={0}; FILE *configFile = fopen(FileName, "r"); memset(d,0,sizeof(Data)); while(NULL != fgets(LineBuf, sizeof(LineBuf), configFile)) { size_t bufLen = strlen(LineBuf); if('\r' == LineBuf[bufLen-1] || '\n' == LineBuf[bufLen-1]) { LineBuf[bufLen-1] = '\0'; } char *pos = strchr(LineBuf,':'); if(NULL != pos) { *pos = '\0'; pos++; if(0 == strcmp(LineBuf, "information1")) { for(; *pos == ' '; pos++){} strcpy(d->firstline, pos); } else if(0 == strcmp(LineBuf, "information2")) { for(; *pos == ' '; pos++){} strcpy(d->secondline, pos); } else if(0 == strcmp(LineBuf, "information3")) { for(; *pos == ' '; pos++){} strcpy(d->thirdline, pos); } else { printf("Failed to read information from the file."); break; } } } fclose(configFile); configFile = NULL; return; } int main(int argc, char *argv[]) { Data *d = new Data; readfile(d); printf("d->firstline is \"%s\"\n", d->firstline); printf("d->secondline is \"%s\"\n", d->secondline); printf("d->thirdline is \"%s\"\n", d->thirdline); delete d; return 0; }
复制代码

当中,struct Data是用于存储要读取的信息的结构体,readfile函数也就是实现我们读取功能的函数,当中的值均存在struct Data中。最后我们写了一个简单的main函数用来測试结果。须要注意的是,在struct Data中,我们设置了char数组长度,最大不超过128。因此假设要读取的信息超过128字节可能会出错。假设有须要读取更长的话能够将MAX_LEN设置为一个更大的值。

3. 最后就是我们的调试结果了,在命令行中执行例如以下命令

$ g++ -o test.out ReadFile.cpp $ ./test.out

然后就是执行结果:

d->firstline is "1234567890" d->secondline is "this is test information" d->thirdline is "`!@#$%^&*()_+{}-[]\|:"/.,<>"

这样的读取文件的代码应该很经常使用。要掌握。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115424.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月4日 下午5:00
下一篇 2022年2月4日 下午5:00


相关推荐

  • lxml.etree 入门

    lxml.etree 入门来源 http lxml de tutorial html 作者 StefanBehnel 这个教学覆盖 lxml 处理的主要几个方面 其中的一些增强也许能使你的码农生涯好过一点 完整的 API 请看 http lxml de api index html 通常像下面这样导入 lxml etree 模块 fromlxmlimpo 类这个一个主要的类

    2026年3月17日
    2
  • SpringMVC工作原理及其流程

    SpringMVC工作原理及其流程本文介绍SpringMVC的基本原理,对于一个浏览器请求,SpringMVC的处理流程。SpringMVC主要包含一下组件DispatcherServlet-前端控制器HandlerMapping-处理器映射Controller-控制器ViewResolver-视图解析器View-视图Spring的请求流程SpringMVC的核心在于其请求流程,这是使用Spring…

    2022年5月14日
    40
  • 零基础 3 步生成专业原型图!Cursor+Claude3.7 保姆级教程(附模板)

    零基础 3 步生成专业原型图!Cursor+Claude3.7 保姆级教程(附模板)

    2026年3月16日
    3
  • 如何设置让网站禁止被爬虫收录?robots.txt

    如何设置让网站禁止被爬虫收录?robots.txt

    2021年10月9日
    44
  • 交通灯控制逻辑电路设计实验报告_交通灯控制电路的设计报告

    交通灯控制逻辑电路设计实验报告_交通灯控制电路的设计报告交通灯控制逻辑电路设计这是一个数电实验,交通灯,如果使用FPGA或者单片机来完成的话,会简单很多,这里采用的是使用常规的计数器,触发器,门电路等基本器件搭建,扩展部分可以完成总通行时间在100s内任意设置,红、黄、绿灯亮的时间长短之和在100s内任意设置,其实想要超过100s只需要扩展相应的计数器,以及门电路即可,限制功能的往往是资源;一、选题背景1.1、应用背景为了确保十字路口的车辆顺利、畅通地通过,往往都采用自动控制的交通信号灯来进行指挥。其中红灯(R)亮表示该条道路禁止通行;黄灯(Y)亮表示停

    2025年11月26日
    5
  • GIS制图人员的自我修养(1)–制图误区

    GIS制图人员的自我修养(1)–制图误区GIS 制图人员的自我修养 by 李远祥 nbsp nbsp nbsp nbsp nbsp 最近一直坚持写 GIS 制图的技术专题 并不是为了要介绍有什么好的技术和方法去制图 而是要告诉所有从事这一方向的人员一个铁铮铮的实现要做好 GIS 制图 必须加强自身的修养 nbsp nbsp nbsp nbsp nbsp 为什么修养前面不加任何的定语 为什么不是 技术修养 或者是 技能修养 等 因为我在这里讲的修养 是一个非常普通的大众的名词 可能很多人会说 我修养很好 不需要再提

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号