实现经常使用的配置文件/初始化文件读取的一个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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm创建python虚拟环境好处_pycharm虚拟环境与本地环境区别

    pycharm创建python虚拟环境好处_pycharm虚拟环境与本地环境区别很多时候由于每个项目所需要的库和其版本都不一样,在根目录下运行项目的复杂性会大很多,这是很多人会选择使用虚拟环境,今天给大家介绍一些pycharm中傻瓜式添加虚拟环境的方法。pycharm首页:File=>Settings=>你的项目名下的pythoninterpreter=>设置按钮=>addpythoninterpreter图1在该页面下的VirtualenvEnvironment(虚拟环境设置界面),有两种设置添加虚拟环境的选项。Ne

    2022年8月28日
    2
  • Unity插件——Odin使用心得(一)「建议收藏」

    Unity插件——Odin使用心得(一)「建议收藏」声明:本文章为作者对Odin插件常见功能的学习笔记,仅用于学习用途.插件在活动打折时购买,本人不提供插件下载链接.系列文章目录Unity插件——Odin使用心得(一)Unity插件——Odin使用心得(一)系列文章目录一.开发环境二.使用前准备三.常用功能讲解1.命名空间2.AssetsOnly\SceneObjectsOnly:引用限制为预制体\场景物体3.Delayer:延迟赋值4.DetailedInfoBox:信息提示–标题/内容5.EnableGUI:激活GUI6.GUIColo.

    2022年7月21日
    13
  • 几种保持登录状态的方式

    几种保持登录状态的方式

    2021年11月6日
    47
  • Android屏幕适配AndroidAutoSize的使用「建议收藏」

    Android屏幕适配AndroidAutoSize的使用「建议收藏」Android屏幕适配AndroidAutoSize的使用AndroidAutoSize的使用加入依赖配置AndroidManifest.xml主单位或者副单位主单位的配置副单位的配置主单位的使用副单位的使用插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入AndroidAutoSize的使

    2022年5月26日
    76
  • 广州java培训哪家教育机构比较好_广州java培训课程

    广州java培训哪家教育机构比较好_广州java培训课程如今社会上的就业竞争非常激烈,许多公司都在不断的提高对求职者的需求,大家也逐渐的开始意识到掌握一项适用的技能是非常重要的,一技之长不仅能够给我们带来就业上的巨大优势,还能提高我们的薪资收入,让我们更上一层楼。正因如此,越来越多的同学选择在就业之前通过专业的IT培训机构掌握一项实用的专业技能,而Java成为了进入IT行业的敲门砖,而目前每个城市的Java培训机构都有很多,让人难以选择,经调查,大部分的同学会通过一些排名榜进行参考,而今天,排名榜小编为大家主要介绍广州Java培训机构排名,主要通过教学质量,

    2022年10月3日
    1
  • SQL 笛卡尔积现象

    SQL 笛卡尔积现象笛卡尔积的出现是在多表进行联合查询的时候会出现的一种情况。比如有两张表:表一:表二:在进行查询的时候:selectstudentname,SubjectnamefromStudent,subject会出现下面的情形,也就是笛卡尔现象,表一有5条记录,表二有3条记录,那么对于第一张表而言有5种选择,而对于第二张表来说有3种选择。所以结果就是5*3种选…

    2022年7月27日
    6

发表回复

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

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