zoukankan      html  css  js  c++  java
  • C语言 读取配置文件

    配置文件截图:

    读取结果截图:

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

    附代码:

    // ReadConfig.cpp : 定义控制台应用程序的入口点。
    //
    //#include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct configItem
    {
        char key[20];
        char value[50];
    };
    
    configItem configList[] = {
        {"ip", 0},
        {"port", 0},
        {"line", 0}
    };
    
    /*
    * 这个函数是对给定的一个字符串寻找以等号分开的键值对
    * src -- 源字符串
    * key -- 键
    * value -- 值
    */
    int strkv(char *src, char *key, char *value)
    {
        char *p, *q;
        int len;
        p = strchr(src, '=');//p找到等号
        q = strchr(src, '
    ');//q找到换行
    
        //如果有等号有换行
        if (p != NULL && q != NULL)
        {
            *q = ''; //将换行设置为字符串结尾
            strncpy(key, src, p-src); //将等号前的内容拷入key中
            strcpy(value, p+1); //将等号后的内容拷入value中,跳过等号所以p需要加1
            return 1;
        }
        return 0;
    }
    
    /*
    *  读取配置函数
    *
    */
    void Config(char * configFilePath, struct configItem* configVar, int configNum)
    {
        int i;
        FILE * pfile;
        char buf[50] = "";  //缓冲字符串
        char key[50] = "";  //配置变量名
        char value[50] = ""; //配置变量值
    
        //打开配置文件
        pfile = fopen(configFilePath, "r");
    
        if (pfile == NULL)
        {
            printf("配置文件打开失败!
    ");
            exit(-1);
        }
    
        //依次读取文件的每一行
        while (fgets(buf, 50, pfile))
        {
            //读取键值对
            if (strkv(buf, key, value))
            {
                //读取成功则循环匹配数组
                for (i = 0; i < configNum; i++)
                {
                    //名称相等则匹配成功,拷贝value值
                    if (strcmp(key, configVar[i].key) == 0)
                    {
                        strcpy(configVar[i].value, value);
                    }
                }
                //key字符串在strkv函数内部没有给结束符'',需要这里重置一下
                //value在strkv中已经给了结束符''
                memset(key, 0, strlen(key));
            }
    
        }
        fclose(pfile);
    }
    
    void main()
    {
        int i;
        //读取配置文件
        Config("C:\config.txt",
            configList,
            sizeof(configList)/sizeof(struct configItem)
            );
    
        for (i = 0; i < sizeof(configList)/sizeof(struct configItem); i++)
        {
            printf("%s=%s 
    ", configList[i].key, configList[i].value);
        }
        system("pause");
    }

    (完)

  • 相关阅读:
    CSP2019-S2总结
    #期望dp#洛谷 6835 [Cnoi2020]线形生物
    #树状数组,概率,离散,双指针#洛谷 6834 [Cnoi2020]梦原
    #容斥,倍数,排列组合#洛谷 2714 四元组统计
    #莫队,bitset#洛谷 3674 小清新人渣的本愿
    #贪心#洛谷 3173 [HAOI2009]巧克力
    #树链剖分,LCA#洛谷 3398 仓鼠找sugar
    #树状数组,哈希#洛谷 6687 论如何玩转 Excel 表格
    小甲鱼Python第八讲课后习题
    小甲鱼Python第七讲课后习题
  • 原文地址:https://www.cnblogs.com/fwst/p/3797298.html
Copyright © 2011-2022 走看看