在运行writeCFG多次后,其中的fseek爆出Segmentation fault的错误

weixin_42451017 2020-03-26 02:47:31
在运行writeCFG多次后,其中的fseek爆出Segmentation fault的错误
参考的代码,用的vs 中的c for linux, linux环境是ubuntu18.0.4
int writeCFG(const char* filename/*in*/, const char* key/*in*/, const char* value/*in*/) {
int flen = 8192;
FILE* pf = NULL;
char ftemp[8192] = { 0 }, fline[1024] = { 0 }, * fp; //文件缓存数组
long fsize = 0;
int reg = 0;
int exit = 0;
pf = fopen(filename, "r+");
if (pf == NULL) {
pf = fopen(filename, "w+");
}
fseek(pf, 0, SEEK_END)//在此处报错
fsize = ftell(pf);
if (fsize > flen) {
printf("文件不能超过8k\n");
reg = -1;
goto end;
}
fseek(pf, 0, SEEK_SET); //将文件指针指向开头

//一行一行的读,如果存在key则修改value存到缓存数组中
while (!feof(pf)) {
fgets(fline, 1024, pf);
if (strstr(fline, key) != NULL && exit == 1)
{
strcpy(fline, "");
}
if (strstr(fline, key) != NULL && exit == 0) { //判断key是否存在
exit = 1;
sprintf(fline, "\n%s = %s", key, value);
}
strcat(ftemp, fline);
}
if (exit != 1) {//如果不存在则把key value写入到最后一行
sprintf(fline, "\n%s = %s", key, value);
strcat(ftemp, fline);
}
if (pf != NULL) {
fclose(pf);
pf = fopen(filename, "w");
fp = (char*)malloc(sizeof(char) * strlen(ftemp)+1);
strcpy(fp, ftemp);
//fp[strlen(fp) - 1] = '\n';
fputs(fp, pf);
if (fp != NULL) {
free(fp);
fp = NULL;
}
fclose(pf);
}
end:
if (pf != NULL)
fclose(pf);
//重新创建一个以filename命名的文件
return reg;
}


拜托了,各位大佬。
...全文
264 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42451017 2020-03-26
  • 打赏
  • 举报
回复
引用 1 楼 自信男孩 的回复:
pf = fopen(filename, "r+");
    if (pf == NULL) {
        pf = fopen(filename, "w+");
    }
这个地方可能有问题,文件pf可能未打开成功~
pf = fopen(filename, "r+");
    if (pf == NULL) {
        pf = fopen(filename, "w+");
        if (!pf)
            return -1;
    }
改成这样试试,如果打开不成功起码不会出现段错误了
应该跟这块没有关系,这段代码在第八次引用的时候报错了
自信男孩 2020-03-26
  • 打赏
  • 举报
回复
pf = fopen(filename, "r+");
if (pf == NULL) {
pf = fopen(filename, "w+");
}

这个地方可能有问题,文件pf可能未打开成功~


pf = fopen(filename, "r+");
if (pf == NULL) {
pf = fopen(filename, "w+");
if (!pf)
return -1;
}

改成这样试试,如果打开不成功起码不会出现段错误了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧