在運行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;
}
拜托了,各位大佬。
uj5u.com熱心網友回復:
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;
}
改成這樣試試,如果打開不成功起碼不會出現段錯誤了
uj5u.com熱心網友回復:
應該跟這塊沒有關系,這段代碼在第八次參考的時候報錯了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/100344.html
標籤:新手樂園
