C语言读取配置文件
自从大学学完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语言读取配置文件的更多相关文章
- C语言 读取配置文件
配置文件截图: 读取结果截图: 代码转自:http://www.tuicool.com/articles/Zb2iIn 附代码: // ReadConfig.cpp : 定义控制台应用程序的入口点. ...
- Go语言读取各种配置文件
配置文件结构体 config.go package config type System struct { Mode string `mapstructure:"mode" jso ...
- Windows 服务多语言化时读取配置文件失败的问题。
在Installer中,按一般读取配置文件的方法(ConfigurationManager.AppSettings["CultureName"])读取不到内容. 可以这样读取: v ...
- Python语言的configparser模块便捷的读取配置文件内容
配置文件是在写脚本过程中经常会用到的,所以读取配置文件的模块configparser也非常重要,但是很简单. 首先我们的配置文件内容为: 这样的配置文件,[]里面的内容叫section,[]下面的内容 ...
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
- 依据不同的操作系统读取配置文件/java读取属性文件代码
package cn.com.css.common.util; /** * @brief OSEnum.java 操作系统的枚举 * @attention * @author 涂作权 * @d ...
- java中读取配置文件ResourceBundle和Properties两种方式比较
今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...
- ResourceBundle与Properties读取配置文件
ResourceBundle与Properties的区别在于ResourceBundle通常是用于国际化的属性配置文件读取,Properties则是一般的属性配置文件读取. ResourceBundl ...
- ResourceBundle和properties 读取配置文件区别
java.util.ResourceBundle 和java.util.properties 读取配置文件区别 这两个类都是读取properties格式的文件的,而Properties同时还能用来写文 ...
随机推荐
- Mac OSX sublime text2 各种快捷键
Mac 快捷键 https://support.apple.com/zh-cn/HT201236 Preferences -> Key Bindings - User [ { "key ...
- [bug] VUE 的 template 中使用 ES6 语法导致页面空白
如果你在 template 中,使用了 es6 及以上的语法,那么,在部分ios.安卓.微信浏览器中,打开页面后显示一片空白内容.如下: <ul id="example-1" ...
- 深入理解java内存模型
深入理解Java内存模型(一)——基础 深入理解Java内存模型(二)——重排序 深入理解Java内存模型(三)——顺序一致性 深入理解Java内存模型(四)——volatile 深入理解Java内存 ...
- Jmeter服务器监控 serveragent如何使用
安装jmeter插件Plugins Managerjmeter-plugins.org推出了全新的Plugins Manager,对于其提供的插件进行了集中的管理,我们只需要安装这个管理插件,即可以在 ...
- iOS 代码混淆的简单使用
1.工具下载 http://stevenygard.com/projects/class-dump/ 选择dmg安装包 2.打开终端输入:open/usr/local/bin 3. 4.修改权限在 ...
- 无头结点的单链表(C语言)
1.单链表: 在顺序表中,用一组地址连续的存储单元来一次存放线性表的结点,因此结点的逻辑顺序与物理顺序是一致的.但链表却不同,链表是用一组任意的存储单元来存放 线性表的结点,这组存储单元可以是连续的, ...
- easyUI combobox下拉框很长,easyUI combobox下拉框如何显示滚动条的解决方法
如下图,combobox下拉框里内容很多时,会导致下拉框很长,很不美观. 如何使得combobox下拉框显示滚动条 方法:把属性panelHeight:"auto"注释掉即可. $ ...
- "|",“.”,"include"在jade中的用法(原样输出)
我们知道, body --><body> abc --><abc></abc> --></body> 如果我们想直接输入内容怎么办呢: ...
- 剑指offer二十三之二叉搜索树的后序遍历序列
一.题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 二.思路 1.二叉搜索树又称二叉排序树(Binar ...
- 安卓开发——ListView控件(初始化ListView、列表刷新、长按添加menu)
前言: ListView——列表,它作为一个非常重要的显示方式,不管是在Web中还是移动平台中,都是一个非常好的.不开或缺的展示信息的工具.在Android中,ListView控件接管了这一重担,在大 ...