#include <stdio.h>
#include <string.h>
const int MAX_KEY_NUM = 128;
const int MAX_KEY_LENGTH = 1024;
char gKeys[MAX_KEY_NUM][MAX_KEY_LENGTH];
char *GetIniKeys(char *title, char *filename)
{
FILE *fp;
int flag = 0;
char sTitle[32], *wTmp;
static char sLine[MAX_KEY_LENGTH];
sprintf(sTitle, "[%s]", title);
if (NULL == (fp = fopen(filename, "r")))
{
perror("fopen");
return NULL;
}
int i = 0;
while (NULL != fgets(sLine, MAX_KEY_LENGTH, fp))
{
/// 这是注释行 ///
if (0 == strncmp("//", sLine, 2)) continue;
if ('#' == sLine[0]) continue;
wTmp = strchr(sLine, '=');
if ((NULL != wTmp) && (1 == flag))
{
strncpy(gKeys[i], sLine, wTmp - sLine);
gKeys[i][wTmp - sLine] = '\0';
i++;
continue;
}
if (('[' == sLine[0]) && (1 == flag))
{
break;
}
else
{
if (0 == strncmp(sTitle, sLine, strlen(sLine) - 1)) /// 长度依文件读取的为准 ///
{
flag = 1; /// 找到标题位置 ///
}
}
}
fclose(fp);
return NULL;
}
char *GetIniKeyString(char *title, char *key, char *filename)
{
FILE *fp;
int flag = 0;
char sTitle[32], *wTmp;
static char sLine[MAX_KEY_LENGTH];
sprintf(sTitle, "[%s]", title);
if (NULL == (fp = fopen(filename, "r")))
{
perror("fopen");
return NULL;
}
while (NULL != fgets(sLine, MAX_KEY_LENGTH, fp))
{
/// 这是注释行 ///
if (0 == strncmp("//", sLine, 2)) continue;
if ('#' == sLine[0]) continue;
wTmp = strchr(sLine, '=');
if ((NULL != wTmp) && (1 == flag))
{
if (0 == strncmp(key, sLine, wTmp - sLine)) /// 长度依文件读取的为准 ///
{
sLine[strlen(sLine) - 1] = '\0';
fclose(fp);
return wTmp + 1;
}
}
else
{
if (0 == strncmp(sTitle, sLine, strlen(sLine) - 1)) /// 长度依文件读取的为准 ///
{
flag = 1; /// 找到标题位置 ///
}
}
}
fclose(fp);
return NULL;
}
int main(int argc, char *argv[])
{
GetIniKeys("CAT", "config.ini");
for (int i = 0; i < MAX_KEY_NUM; i++)
{
printf("%d, %s\n", i, gKeys[i]);
}
printf("==============================\n");
printf("%s\n", GetIniKeyString("CAT", "name", "config.ini"));
return 0;
}
配置文件:config.ini
[CAT]
//name=dsfdsf
age=34
name=aaa
name1=ooo
//[DOG]
[DOG]
name=bbb
name1=xxx
age=25