读取与创建配置文件

来源:互联网 发布:网络播放量排行榜2016 编辑:程序博客网 时间:2024/06/09 16:45

直接上代码吧,读取配置文件代码如下:

#include <stdio.h>#include <string.h>#include <malloc.h>#define THE_TEST_FILE "/test/file/test.conf" int main(){    FILE *f;    char buf[100], *pos;    int line = 0;char name[32]={0};//定义并初始化数组char parameter1[32]={0};char parameter1_sizeof[32]={0};char *parameter3;//定义指针    f = fopen(THE_TEST_FILE, "r");//打开文件    while (fgets(buf, sizeof(buf), f)) //分别读取文件的每一行    {        line++;//记录读到哪一行        if (buf[0] == '#')//遇到#,跳出,准备读下一行            continue;        pos = buf;//pos指向每一行的数据的首地址        while (*pos != '\0') //遇到结束符或回车符,则跳出        {            if(*pos == '\n')             {                *pos = '\0';                break;            }            pos++;        }        if (buf[0] == '\0')            continue;                pos = strchr(buf, '=');//pos指针定位到=这个位置        if (pos == NULL)         {            printf("Line %d: invalid line '%s'", line, buf);            continue;        }        *pos = '\0';//将=字符替换为\0        pos++;//pos指向=后面一字符的位置        if (strcmp(buf, "name") == 0)         {        strcpy(name, pos);printf("line %d: name = %s\n",line,name);        }        if (strcmp(buf, "parameter1") == 0)         {int strlen_pos = (int)strlen(pos)+1;        strncpy(parameter1, pos, strlen_pos);//指针指向内容长度用strlen,printf("line %d: strlen=%d  parameter1 = %s \n",line,strlen_pos,parameter1);printf("line %d: parameter1 = %s strlen=%d \n",line,parameter1,strlen_pos);//奇怪????int sizeof_pos = (int)sizeof(pos);strncpy(parameter1_sizeof, pos, sizeof(pos));//sizeof返回的是指针的大小,所以parameter1_sizeof并没有打印全printf("line %d: sizeof_pos=%d parameter1_sizeof = %s\n",line,sizeof_pos,parameter1_sizeof);        }        if (strcmp(buf, "parameter3") == 0)         {parameter3=(char *)malloc(strlen(pos));//采用动态分配指针strncpy(parameter3, pos, strlen(pos));printf("parameter3 = %s\n",parameter3);        }    }free(parameter3);//free和fclose一定要记得fclose(f);return 0;}

其中test.conf文件如下:

name=testname0000parameter1=test_one1111#parameter2=test_two2222parameter3=test_three3333
输出结果如下:

line 1: name = testname0000 ine 2: strlen=14  parameter1 = test_one1111 strlen=14 ameter1 = test_one1111line 2: sizeof_pos=8 parameter1_sizeof = test_oneparameter3 = test_three3333
这一句printf("line %d: parameter1 = %s strlen=%d \n",line,parameter1,strlen_pos);打印结果很奇怪,为什么呢?暂时搞不懂。

那接下来上创建配置文件的代码如下:

#include <stdio.h>#include <string.h>#include <malloc.h>#define THE_WRITE_TEST_FILE "/test/file/write_test.conf" int main(){    FILE *f;    f = fopen(THE_WRITE_TEST_FILE, "w+");//打开文件    fprintf(f, "write_test1=test_one\n");fprintf(f, "#write_test2=test_two\n");fprintf(f, "write_test3=test_three\n");fprintf(f, "write_test4=test_four\n");fclose(f);return 0;}
输出的write_test.conf文件如下:

write_test1=test_one#write_test2=test_twowrite_test3=test_threewrite_test4=test_four
创建文件比读取还是简单多了。

0 0
原创粉丝点击