思路:
比如linux中,以// 或/* 表示注释,以=表示赋值。
从conf里一行一行读出来,如果第一个字母是/,就忽略;
否则就从 line_of_file 里查找 “=”字符,(去掉行末’\n’换行符)
=之前的就是参数名,=之后的就是参数值(去掉空格,tab)(用strncpy)
实现:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
#ip
ip:192.168.0.0.1
#port
port:8888
*/
/*读取配置文件*/
void test()
{
FILE *fp = fopen("sys.conf", "r");
if (fp == NULL)
{
return;
}
char line[1024] = { 0 }; //定义读入的行数组,1024行
while (!feof(fp))
{
/*初始化line*/
memset(line, 0, 1024);
fgets(line, 1024, fp);
if (line[0] == '/')
{
continue;
}
int len = strlen(line);
/*查找等于号的位置*/
char *equal = strchr(line, '=');
if (epual == NULL)
{
continue;
}
char key[64] = { 0 };
char val[64] = { 0 };
/*消除不必要的换行*/
int offset = 1;
if (line[len - 1] == '\n')
{
offset = 2;
}
/*截取key,val值*/
strncpy(key, line, pos - line);
strncpy(val, pos + 1, line + len - offset - pos);
printf("%s -> %s\n", key, val);
}
}
int main()
{
test();
system("pause");
return 0;
}