配置文件截图:
读取结果截图:
代码转自: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, ‘\n‘);//q找到换行 //如果有等号有换行 if (p != NULL && q != NULL) { *q = ‘\0‘; //将换行设置为字符串结尾 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("配置文件打开失败!\n"); 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函数内部没有给结束符‘\0‘,需要这里重置一下 //value在strkv中已经给了结束符‘\0‘ 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 \n", configList[i].key, configList[i].value); } system("pause"); }
(完)
C语言 读取配置文件
时间: 2024-10-01 02:27:25