用C语言配置文件读取程序,C语言实现读取配置文件

* 函数名: GetIniKeyString

* 入口参数: title

* 配置文件中一组数据的标识

* key

* 这组数据中要读出的值的标识

* filename

* 要读取的文件路径

* 返回值: 找到需要查的值则返回正确结果 0

* 否则返回-1

*/

int GetIniKeyString(const char* title, const char* key, const char* filename, char* buf)

{

FILE* fp;

int flag = 0;

char sTitle[64], * wTmp;

char sLine[1024];

//将title 赋值给sTitle

sprintf(sTitle, "[%s]", title);

if (NULL == ( fp = fopen(filename, "r") )) {

perror("fopen");

return -1;

}

while (NULL != fgets(sLine, 1024, fp)) {

// 这是注释行

if (0 == strncmp("//", sLine, 2))

continue;

if ('#' == sLine[0])

continue;

wTmp = strchr(sLine, '='); //找到配置文件首次出出现等号的位置 未找到返回NULL

if ((NULL != wTmp) && (1 == flag)) {

if (0 == strncmp(key, sLine, strlen(key))) { // 长度依文件读取的为准

sLine[strlen(sLine) - 1] = '\0';

fclose(fp);

while (*(wTmp + 1) == ' ') { //跳过空格

wTmp++;

}

strcpy(buf, wTmp + 1); //赋值

return 0;

}

}

else {

if (0 == strncmp(sTitle, sLine, strlen(sTitle))) { // 长度依文件读取的为准

flag = 1; // 找到标题位置

}

}

}

fclose(fp);

return -1;

}

一些所用到的C库函数

strncmp()

int strncmp(const char *str1, const char *str2, size_t n)

把 str1 和 str2 进行比较,最多比较前 n 个字节。

该函数返回值如下:

如果返回值 < 0,则表示 str1 小于 str2。

如果返回值 > 0,则表示 str2 小于 str1。

如果返回值 = 0,则表示 str1 等于 str2。

fgets()

char *fgets(char *str, int n, FILE *stream)

从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

perror()

C 库函数 void perror(const char *str)

把一个描述性错误消息输出到标准错误 stderr。首先输出字符串 str,后跟一个冒号,然后是一个空格。

strchr()

char *strchr(const char *str, int c)

在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。

该函数返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL.

strlen()

Strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。

头文件:string.h或cstring

格式: strlen (字符指针表达式)

功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内

说明:返回s的长度,不包括结束符NULL。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值