//配置文件读写项目 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> int writefile(const char *path/*in*/, char *pkey/*in*/, char *pvalue/*in*/){ int ERRO_MSG = 0; if (path == NULL) { ERRO_MSG = 1; printf("path==NULL erro msg:%d ", ERRO_MSG); return ERRO_MSG; } if (pkey == NULL) { ERRO_MSG = 2; printf("pkey==NULL erro msg:%d ", ERRO_MSG); return ERRO_MSG; } if (pvalue == NULL) { ERRO_MSG = 3; printf("pvalue==NULL erro msg:%d ", ERRO_MSG); return ERRO_MSG; } //定义文件读指针 FILE *fpwr = fopen(path, "r+"); //判断文件是否打开成功 if (fpwr == NULL) { ERRO_MSG = 4; printf("文件打开失败!erro msg:%d;文件路径是%s ", ERRO_MSG, path); return ERRO_MSG; } //判断原来配置文件里是否有该节点,有该配置节点执行修改操作,没有执行新增操作 //准备字符指针数组,存储所有的键值对 //定义下标 int index = 0; char **bufarr = (char **)malloc(sizeof(char *)*(index + 1)); //存储所有的配置文件(这里读取键值对,用fgets()函数比较合适,因为一行正好一个键值对) while (!feof(fpwr)){//feof()如果文件结束,则返回非0值,否则返回0 //定义文件缓存数组 char buf[100] = { 0 }; //读取文件 fgets(buf, 100, fpwr); //分配每个键值对内存存储空间 char *ptemp = (char *)malloc(sizeof(char)*((int)strlen(buf) + 1)); //拷贝字符串(buf定义在栈里,出了该函数会自动释放) strcpy(ptemp, buf);//strcpy()把从src地址开始且含有' '结束符的字符串复制到以dest开始的地址空间。 //把字符串挂到指针数组上 bufarr[index++] = ptemp; //为指针数组再次分配内存空间 bufarr = (char **)realloc(bufarr, sizeof(char *)*(index + 1)); } //为指针数组最后一个元素赋值NULL bufarr[index] = NULL; //开始查找对应键值对 int a = 0; char *strindex = NULL; while (bufarr[a] != NULL){ char *ptsource = bufarr[a]; while (*ptsource != '