文章目录

  • 一、函数接口形参
  • 二、读取配置文件的逐行遍历操作
    • 1、读取配置文件的逐行遍历操作
    • 2、读取一行数据
    • 3、查找字符
    • 4、删除字符串前后的空格
    • 5、完整代码示例

一、函数接口形参


函数作用 :char *filename 文件中 , 查找 char *key 关键字 对应的 值 ; 将查找到的值 写出到 char *value 指针指向的内存中 , 将值的长度写出到 int *value_len 指向的内存中 ;

代码示例 :

/*** @brief read_config_file 读取配置文件* @param filename 文件名* @param key      键* @param value    值* @param value_len 值字符串长度* @return*/
int read_config_file(char *filename /*in*/, char *key /*in*/, char *value/*in out*/, int *value_len /*out*/)

二、读取配置文件的逐行遍历操作


1、读取配置文件的逐行遍历操作

读取配置文件的逐行遍历操作 :

  • 读取一行文本数据
  • 先判断该行数据中, 是否包含 ‘=’ 字符
  • 然后查找该行数据中 , 是否存在 Key 关键字字符串
  • 如果存在 Key 关键字 , 则继续查找 Key 关键字右侧是否有 ‘=’ 字符
  • 如果找到了 ‘=’ 字符 , 则越过该字符 , 剩下的就是 Value 字符串信息 ;
  • 删除 Value 字符串左右两侧的空格信息
  • 使用两个指针分别指向 Value 字符串两侧 ;

2、读取一行数据

        // 获取一行数据fgets(line_buffer, MAX_LINE, fp);

3、查找字符

        // 查找 '=' 字符p = strchr(line_buffer, '=');// 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环if (p == NULL){continue;}

4、删除字符串前后的空格

        // 获取 Value 起始位置for(;;){// 去掉开始位置的空格if (*p == ' '){p ++ ;}else{start = p;if (*start == '\n'){// 进入到该分支 , 说明 Value 值是空的// 直接退出即可goto End;}break;}}// 获取 Value 结束位置// 从 Value 的不为空格的位置开始遍历for(;;){// 遇到空格或回车 , 说明读取到了最后的位置, 或者换行位置if ((*p == ' ' || *p == '\n')){break;}else{p ++;}}end = p;

5、完整代码示例

    // 逐行遍历 配置文件 中的文本数据while (!feof(fp)){// 清空 line_buffer 中的遗留数据 , 避免被上一次写入的数据干扰memset(line_buffer, 0, sizeof(line_buffer));// 获取一行数据fgets(line_buffer, MAX_LINE, fp);// 查找 '=' 字符p = strchr(line_buffer, '=');// 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环if (p == NULL){continue;}// 查找 Key 值// 如果找到了 Key 关键字 , 则返回的指针 p 指向 Key 关键字出现的首地址中p = strstr(line_buffer, key);// 如果没有找到 Key 关键字 , 退出执行下一次循环换if (p == NULL){continue;}// 越过 Key 关键字 , 从 Key 关键字后面的内容遍历p = p + strlen(key);// 查找 '=' 字符p = strchr(p, '=');// 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环if (p == NULL){continue;}// 越过 '=' 字符 , 从 '=' 字符 后面的内容遍历p = p + 1;// 获取 Value 起始位置for(;;){// 去掉开始位置的空格if (*p == ' '){p ++ ;}else{start = p;if (*start == '\n'){// 进入到该分支 , 说明 Value 值是空的// 直接退出即可goto End;}break;}}// 获取 Value 结束位置// 从 Value 的不为空格的位置开始遍历for(;;){// 遇到空格或回车 , 说明读取到了最后的位置, 或者换行位置if ((*p == ' ' || *p == '\n')){break;}else{p ++;}}end = p;// 通过 间接赋值 设置 Value 值长度*value_len = end - start;// 通过 间接赋值 设置 Value 值数据内容memcpy(value, start, end - start);}

【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )相关推荐

  1. C语言文件的随机读写

    C语言文件的随机读写 文件顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  2. c 语言 字符 查找,C 语言实例 - 查找字符在字符串中出现的次数

    C 语言实例 - 查找字符在字符串中出现的次数 C 语言实例 C 语言实例 查找字符在字符串中的起始位置(索引值从 开始). 实例 #include int main() { char str[], ...

  3. c语言生成随机坐标,C语言 文件的随机读写详解及示例代码

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  4. c语言生成随机的坐标,C语言文件的随机读写

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  5. c语言二fseek从文件头移动_编程C语言文件的随机读写

    实现随机读写的关键是要按要求移动位置指针,这称为文件的定位. 文件定位 移动文件内部位置指针的函数主要有两个,即rewind()和fseek().rewind函数前面已多次使用过,其调用形式为:    ...

  6. 查找字符串中指定字符的位置c语言,C语言中查找字符在字符串中出现的位置的方法...

    C语言strchr()函数:查找某字符在字符串中首次出现的位置 头文件:#include strchr() 用来查找某字符在字符串中首次出现的位置,其原型为: char * strchr (const ...

  7. 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 写出或更新配置文件 | 读取配置文件 )

    文章目录 一.写出或更新配置文件 二.读取配置文件 一.写出或更新配置文件 写出或更新配置文件 : 首先 , 使用 字符数组 存储 键值对 信息 ; // 写出 或 更新 的配置项// 数组声明会后 ...

  8. c语言实现将字符串首尾*删除,C语言实现Trim()函数:删除字符串首尾空格。...

    如:" cd dwq   ",删除后为"cd dwq". 思路:定义两个指针,一个指向字符串的第一个字符,向后遍历,找到第一个不为空格的字符.另一个指针指向字符 ...

  9. 【C 语言】文件操作 ( 配置文件读写 | 完整代码示例 ) ★

    文章目录 一.头文件 cfg.h 二.核心业务 cfg.c 三.主函数 四.执行结果 一.头文件 cfg.h // 防止多次导入 #ifndef __CFG_H__ #define __CFG_H__ ...

最新文章

  1. 争夺基础架构主导权,AI 新一轮战争将打响?
  2. echarts中的世界地图
  3. UA OPTI501 电磁波 LIH介质中的平面波1 平面波的性质
  4. boost::hana::decltype_用法的测试程序
  5. spring aop execution表达式
  6. TensorFlow载入VGG并可视化每层
  7. 只看当前分支_看小姐姐用动图展示10大Git命令
  8. 第一个简单的Servlet
  9. java中复制图片_2017.5.3 java中 复制图片的4种方式(copy图片只能用字节流对象)...
  10. 尚硅谷RabbitMQ学习笔记(上)
  11. 数学实验基于matlab软件,数学实验:基于MATLAB软件
  12. mac u盘linux 双系统安装教程,苹果电脑怎么安装双系统 苹果电脑安装双系统教程...
  13. Istio对接虚拟机
  14. 文本文件(txt或者ttt格式)数据导入OpenGL中绘制花房子
  15. 列表中循环添加字典出现覆盖现象的问题
  16. 【Linux】基础指令
  17. 深度学习基础-损失函数详解
  18. Gram矩阵+Gram矩阵和协方差矩阵的关系
  19. 爬了3000万QQ用户数据,挖出了花千骨赵丽颖的QQ号
  20. [转]打工仔拒绝与砍手党同流合污 因被辞退怒杀主管

热门文章

  1. 关于如何修改Redmine系统中的字段问题解答
  2. WinForm创建系统托盘以及操作注册表
  3. legend3---6、legend3爬坑杂记
  4. c#一种存储结构解决动态平衡问题
  5. C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。...
  6. 在linux下安装配置DNS服务器
  7. MongoDb 安全配置
  8. TechEd China 2009 课程幻灯片和代码下载 - MBL311 SQL Server Compact 终极性能调校
  9. JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理...
  10. zend studio报错