c语言实现ini文件读取

版权声明:本文为博主原创文章,转载请注明【转载自皓月如我的CSDN博客】,并贴出原始链接地址。 https://blog.csdn.net/fm0517/article/details/88884771
#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

猜你喜欢

转载自blog.csdn.net/fm0517/article/details/88884771