配置文件截图:

读取结果截图:

代码转自:http://www.tuicool.com/articles/Zb2iIn

附代码:

  1. // ReadConfig.cpp : 定义控制台应用程序的入口点。
  2. //
  3. //#include "stdafx.h"
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. struct configItem
  9. {
  10. char key[];
  11. char value[];
  12. };
  13.  
  14. configItem configList[] = {
  15. {"ip", },
  16. {"port", },
  17. {"line", }
  18. };
  19.  
  20. /*
  21. * 这个函数是对给定的一个字符串寻找以等号分开的键值对
  22. * src -- 源字符串
  23. * key -- 键
  24. * value -- 值
  25. */
  26. int strkv(char *src, char *key, char *value)
  27. {
  28. char *p, *q;
  29. int len;
  30. p = strchr(src, '=');//p找到等号
  31. q = strchr(src, '\n');//q找到换行
  32.  
  33. //如果有等号有换行
  34. if (p != NULL && q != NULL)
  35. {
  36. *q = '\0'; //将换行设置为字符串结尾
  37. strncpy(key, src, p-src); //将等号前的内容拷入key中
  38. strcpy(value, p+); //将等号后的内容拷入value中,跳过等号所以p需要加1
  39. return ;
  40. }
  41. return ;
  42. }
  43.  
  44. /*
  45. * 读取配置函数
  46. *
  47. */
  48. void Config(char * configFilePath, struct configItem* configVar, int configNum)
  49. {
  50. int i;
  51. FILE * pfile;
  52. char buf[] = ""; //缓冲字符串
  53. char key[] = ""; //配置变量名
  54. char value[] = ""; //配置变量值
  55.  
  56. //打开配置文件
  57. pfile = fopen(configFilePath, "r");
  58.  
  59. if (pfile == NULL)
  60. {
  61. printf("配置文件打开失败!\n");
  62. exit(-);
  63. }
  64.  
  65. //依次读取文件的每一行
  66. while (fgets(buf, , pfile))
  67. {
  68. //读取键值对
  69. if (strkv(buf, key, value))
  70. {
  71. //读取成功则循环匹配数组
  72. for (i = ; i < configNum; i++)
  73. {
  74. //名称相等则匹配成功,拷贝value值
  75. if (strcmp(key, configVar[i].key) == )
  76. {
  77. strcpy(configVar[i].value, value);
  78. }
  79. }
  80. //key字符串在strkv函数内部没有给结束符'\0',需要这里重置一下
  81. //value在strkv中已经给了结束符'\0'
  82. memset(key, , strlen(key));
  83. }
  84.  
  85. }
  86. fclose(pfile);
  87. }
  88.  
  89. void main()
  90. {
  91. int i;
  92. //读取配置文件
  93. Config("C:\\config.txt",
  94. configList,
  95. sizeof(configList)/sizeof(struct configItem)
  96. );
  97.  
  98. for (i = ; i < sizeof(configList)/sizeof(struct configItem); i++)
  99. {
  100. printf("%s=%s \n", configList[i].key, configList[i].value);
  101. }
  102. system("pause");
  103. }

(完)

C语言 读取配置文件的更多相关文章

  1. C语言读取配置文件

    自从大学学完C之后,就再也没用过它了, 在网上找代码,七拼八凑之后,终于成形~~勉强能用,不喜勿喷,^_^! int GetValue(const wchar_t *key, wchar_t *val ...

  2. Go语言读取各种配置文件

    配置文件结构体 config.go package config type System struct { Mode string `mapstructure:"mode" jso ...

  3. Windows 服务多语言化时读取配置文件失败的问题。

    在Installer中,按一般读取配置文件的方法(ConfigurationManager.AppSettings["CultureName"])读取不到内容. 可以这样读取: v ...

  4. Python语言的configparser模块便捷的读取配置文件内容

    配置文件是在写脚本过程中经常会用到的,所以读取配置文件的模块configparser也非常重要,但是很简单. 首先我们的配置文件内容为: 这样的配置文件,[]里面的内容叫section,[]下面的内容 ...

  5. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  6. 依据不同的操作系统读取配置文件/java读取属性文件代码

    package cn.com.css.common.util; /**  * @brief OSEnum.java 操作系统的枚举  * @attention  * @author 涂作权  * @d ...

  7. java中读取配置文件ResourceBundle和Properties两种方式比较

    今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...

  8. ResourceBundle与Properties读取配置文件

    ResourceBundle与Properties的区别在于ResourceBundle通常是用于国际化的属性配置文件读取,Properties则是一般的属性配置文件读取. ResourceBundl ...

  9. ResourceBundle和properties 读取配置文件区别

    java.util.ResourceBundle 和java.util.properties 读取配置文件区别 这两个类都是读取properties格式的文件的,而Properties同时还能用来写文 ...

随机推荐

  1. java课后实验性问题4

    课后作业一: 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象? 设计思路:定义类的构造函数时使静态变量i进行i++,即每构 ...

  2. Tensorflow使用训练好的模型进行测试,发现计算速度越来越慢

    实验时要对多个NN模型进行对比,依次加载直到第8个模型时,发现运行速度明显变慢而且电脑开始卡顿,查看内存占用90+%. 原因:使用过的NN模型还会保存在内存,继续加载一方面使新模型加载特别特别慢,另一 ...

  3. tensorflow训练时用到的一些“工具”

    1.graph和参数的store和restore 2.tensorboard查看 2.1tensorboard根据.meta文件查看图 2.2如何看图

  4. mongoose 实现 增、删、改、查

    mongoose常用的API 增 save是一个实例方法,使用时需要先 new Model() 来实例化 //保存一个用户信息,userobj为你创建的文档对象模型里的字段,需正确对应传入 const ...

  5. selenium 配置 chromedriver

    参考文档: https://blog.csdn.net/yoyocat915/article/details/80580066?tdsourcetag=s_pcqq_aiomsg http://npm ...

  6. 一步一步搭建Nuget私服

    大致流程:1. 通过VS创建一个Web空项目,然后通过Nuget引入Nuget.Server(目前最新版3.2.1).2. 直接将这个Web项目发布到IIS.3. 通过nuget.exe打包*.nup ...

  7. js的event详解

    event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromElement ...

  8. sed例子

    以care.log这个log文件为例, care.log: 05:44:31,816 DEBUG RawAggregationWorker:70 - LTS is working on Raw Dat ...

  9. Django:(01) 关于什么是Django?

    一.从 WSGI 开始了解 Django 在了解 Django 之前有必要先了解一下 Python 被用于 Web 开发的基础协议——WSGI. 在开发 web 应用时,我们不希望接触到TCP连接.H ...

  10. Centos7 yum源配置及关闭防火墙

    清理源 #yum clean all更新源缓存 #yum makecache更新源 #yum update 设置主机名: #hostnamectl set-hostname 查看防火墙状态 #syst ...