我想讓用戶輸入打開一個 txt 檔案,但我收到了這個編譯錯誤。[1] 85501 segmentation fault有人可以幫我弄這個嗎?示例輸入2021-10-17
這是 git repo https://github.com/anjula-sack/diary
void DecryptEntry()
{
FILE *fptr;
char filename[20];
printf("Please enter the date of the entry you want to read, ex:2021-10-17\n");
fscanf(stdin, " ");
fgets(filename, 20, stdin);
strcpy(filename, ".txt");
printf("%s.txt", filename);
if ((fptr = fopen(filename, "r")) == NULL)
{
printf("Error! the entry doesn't exist");
}
}
uj5u.com熱心網友回復:
從你的 github 鏈接查看實際代碼,然后你有這個:
strcpy(filename, ".txt");
if ((fptr = fopen(filename, "r")) == NULL)
{
printf("Error! the entry doesn't exist");
}
fgets(message, 100, fptr);
首先,這strcpy是無稽之談,因為它會覆寫檔案名并將其替換為".txt". 由于這永遠不是有效的檔案名,因此fopen將始終失敗。當它失敗時,你列印一條錯誤資訊但繼續執行,所以下一次fgets呼叫將導致崩潰。
通過為檔案名分配足夠的空間來解決此問題,strcpy用strcat(追加)替換(覆寫)并return在無法打開檔案時執行等操作。
通過使用除錯器單步執行函式,您可以輕松地自己發現這些錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322582.html
上一篇:C一本書的結構
