实现经常使用的配置文件/初始化文件读取的一个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 "`!@#$%^&*()_+{}-[]\|:"/.,<>"

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm中的注释_java中单行注释

    pycharm中的注释_java中单行注释”””注释””””’注释”’\#注释前两种不是真正的注释,知识字符串的另一种表现形式,例如会被用于写__doc__等长字符串的时候起到保留格式的目的,虽然能够完成注释功能,但实际上还是字符串。按ctrl+/即可快速注释代码块ps.转载出处作者已注销账号…

  • 基于粒子群优化算法的函数寻优算法研究_matlab粒子群优化算法

    基于粒子群优化算法的函数寻优算法研究_matlab粒子群优化算法一、理论基础粒子群算法(particleswarmoptimization,PSO)是计算智能领域一种群体智能的优化算法。该算法最早由Kennedy和Eberhart在1995年提出的。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时,找到食物最简单有效的策略就是搜寻当前距离食物最近的鸟的周围区域。PSO算法就是从这种生物种群行为特征中得到启发并用于求解优化问题的,算法中每个粒子都代表问题的一个潜在解,每个粒子对应一个由适应度函数决定的适应度值。粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子

    2022年10月11日
  • 程序员警句

    程序员警句

  • 秒杀多线程第四篇 一个经典的多线程同步问题

    秒杀多线程第四篇 一个经典的多线程同步问题

  • 两个求和符号如何用计算机,计算:两个求和符号∑∑怎么办「建议收藏」

    两个求和符号如何用计算机,计算:两个求和符号∑∑怎么办「建议收藏」先将其中一个未知数当常量,另一个未知数从1至n依次递加后各项式子相加。然后再将另一个未知数从1至n依次递加后各项式子相加便是结果。∑是一个求和符号,汉语名称为西格玛(大写Σ,小写σ)。第十八个希腊字母。在希腊语中,如果一个单字的最末一个字母是小写sigma,要把该字母写成ς,在现代的希腊数字代表6。大写Σ用于数学上的总和符号,比如:∑Pi,其中i=1,2,…,T,即为求P1+P2+…

    2022年10月11日
  • qt交叉编译环境搭建_arm linux gcc

    qt交叉编译环境搭建_arm linux gccaarch64-linux-gnu-gcc是由Linaro公司基于GCC推出的的ARM交叉编译工具

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

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