自从大学学完C之后,就再也没用过它了,

在网上找代码,七拼八凑之后,终于成形~~勉强能用,不喜勿喷,^_^!

int GetValue(const wchar_t *key, wchar_t *value)
{
FILE* fpcfg = NULL;
wchar_t var[], val[];//key,value
wchar_t linebuf[];
wchar_t* ptr1 = NULL;
wchar_t* ptr2 = NULL;
wchar_t* delimiter = NULL;
int k = ; assert(key != NULL && value != NULL); //testConfig.ini中的内容为:
//key1 = value1
//key2 = value2
fpcfg = fopen("testConfig.ini", "rt");
if(fpcfg == NULL)
{
return -;
} while(fgetws(linebuf, sizeof(linebuf), fpcfg) != NULL)
{
//ignore annotation line
if(linebuf[]=='#' || linebuf[]==';')
{
continue;
} //ignore empty line
ptr1 = linebuf;
while(*ptr1==0x20 || *ptr1=='\t')
ptr1++;
if(!*ptr1 || *ptr1=='\n')
{
continue;
}
//search "="
ptr2 = ptr1;
while(*ptr2 && *ptr2!='=')
{
ptr2++;
}
delimiter = *ptr2?ptr2:NULL;
//if current line start with "=", continue next line
if(!delimiter || delimiter==ptr1)
{
continue;
}
//*delimiter = '\0';
ptr2 = delimiter-;
//ignore blank before "="
while(*ptr2==0x20 || *ptr2=='\t')
{ ptr2--;}
//check key length
k = ptr2-ptr1+;
if(k>(int)sizeof(var)-)
{
//The key name is out of length."
continue;
}
//save key name
ptr2 = var;
while(k--)
{
*ptr2++ = *ptr1++;
}
*ptr2 = '\0'; //locate value's start point(may be '\0')
ptr1 = delimiter+;
//ignore blank after "="
while(*ptr1==0x20 || *ptr1=='\t')
{
ptr1++;
}
//set ptr2 point to line end
ptr2 = linebuf;
while(*ptr2)
{ptr2++;}
ptr2--;
if(*ptr2=='\n')
{
*ptr2-- = '\0';
}
//ignore blank line end
//if value is empty,ptr2 --> = , ptr1>ptr2
while(*ptr2==0x20 || *ptr2=='\t' )
{
ptr2--;
}
//check value length
k = ptr2-ptr1+;
if(k>(int)sizeof(val)-)
{
//The value is out of length"
continue;
}
//save value
ptr2 = val; while(k-->)
{
*ptr2++ = *ptr1++;
} *ptr2 = '\0'; if(wcsncmp(var,key, wcslen(var) > wcslen(key) ? wcslen(var) : wcslen(key))==){
wcsncpy(value,val, wcslen(val));
return ;
}
}
fclose(fpcfg);
fpcfg = NULL; return -;
}

恩,再来个main方法测试下:

int _tmain(int argc, wchar_t* argv[])
{
wchar_t value[] = {}; wchar_t keyParam[] = L"ip";
wchar_t *temp = (wchar_t *)malloc(sizeof(wchar_t) * ); if(temp != NULL){
memset(temp, 0x00, sizeof(wchar_t) * );
}else{
return -;
} if( == GetValue(keyParam, temp)){
wcsncpy(value, temp, wcslen(temp));
wprintf(L"Found: %s\n", value);
}else{
wprintf(L"Not Found!!\n");
} if(temp != NULL)
{
free(temp);
temp = NULL;
}
return ;
}

好吧,这确实是个很丑陋的版本,仅供自己留着备用。

点这里下载

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

  1. C语言 读取配置文件

    配置文件截图: 读取结果截图: 代码转自:http://www.tuicool.com/articles/Zb2iIn 附代码: // ReadConfig.cpp : 定义控制台应用程序的入口点. ...

  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. Openwrt 远程调试

    此文已由作者吴志勐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文以自己的程序WFD为例: 1,为路由器固件刷上gdbserver 在宿主端,使用make menucon ...

  2. 纯文本-FileInputStream的编码与解码方式

    前言:以下分析只针对纯文本 1.FileInputStream默认的编码方式就是文件的编码方式 即:源文件是什么编码方式,则利用FileInputStream默认读取的字节数组,就是什么编码方式. 例 ...

  3. bzoj2095: [Poi2010]Bridges(二分+混合图求欧拉回路)

    传送门 这篇题解讲的真吼->这里 首先我们可以二分一个答案,然后把所有权值小于这个答案的都加入图中 那么问题就转化为一张混合图(既有有向边又有无向边)中是否存在欧拉回路 首先 无向图存在欧拉回路 ...

  4. centos7无法上网问题

    在虚拟机VM中安装了centos7,无法上网,在同一个虚拟机里,也安装了Ubuntu是可以上网的,不知道咋回事,所以上网查了资料博客,现总结如下. 一.首先打开虚拟的设置,可以看到虚拟机网络的设置默认 ...

  5. linux安装应用程序

    实验:为 Linux 主机安装应用程序   环境:vmware workstation 14  . redhad-server-6.4 需求:1.使用 RPM 包的方式安装 Mozilla Firef ...

  6. 【9】JMicro微服务-发布订阅消息服务

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. JMicro消息服务目前实现特性 a. JMicro只支持发布订阅消息服务,不支持队列式消息服务: b. 不支持消息持 ...

  7. 【xsy1611】 数位dp 数位dp

    这题是显然的数位$dp$,然而我居然写了一个下午!!! 我们不难想到差分,令$solve(x,y)$表示从第一个数字在区间$[0,x]$,第二个数字在区间$[0,y]$的答案. 不难发现题目中给了你一 ...

  8. tensorflow训练了10万次,运行完毕,对这个word2vec终于有点感觉了

    tensorflow训练了10万次,运行完毕,对这个word2vec终于有点感觉了 感觉它能找到词与词之间的关系,应该可以用来做推荐系统.自动摘要.相关搜索.联想什么的 tensorflow1.1.0 ...

  9. 剑指offer五十四之字符流中第一个不重复的字符

    一.题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  10. python——利用selenium模仿键盘输入跳转

    这是我以前遇到的一个网站:人卫临床助手,这个网站比较奇怪,不能点击右键查看源码,但是大家可以使用ctrl+U,打开开发者选项,点击network,然后点击第2页和第3页: 可以看到上面的URL是一模一 ...