本篇 ShengYu 介紹 C/C++ fclose 的用法與範例,檔案的讀取或寫入都需要先開檔,有開檔就有關檔,fopen 開檔對應的關檔函式就是 fclose 。
C/C++ 要使用 fclose 的話需要引入的標頭檔 <stdio.h>
,如果要使用 C++ 的標頭檔則是引入 <cstdio>
,
fclose 函式原型為1
int fclose(FILE * stream);
stream:指向 FILE 物件的指標
以下 C/C++ fclose 的用法介紹將分為這幾部份,
- C/C++ fclose 的基本用法
- C/C++ fclose 正確的關檔
那我們開始吧!
C/C++ fclose 的基本用法
這邊介紹 C/C++ fclose 基本用法,fopen 開檔成功回傳不為 NULL,fopen 開檔失敗則會回傳 NULL,開檔成功的話就繼續處理之後的程式邏輯,接著使用 fputs 進行寫入字串,fputs 會將字串寫入直到遇見結束字元為止,最後再 fclose 關檔,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// g++ cpp-fclose.cpp -o a.out
int main() {
FILE *fp;
fp = fopen("output.txt", "w");
if (fp == NULL) {
printf("failed to open the file.\n");
return 1; // EXIT_FAILURE
}
fputs("hello world\n", fp);
fputs("123", fp);
fputs("456", fp);
fclose(fp);
return 0;
}
輸出 output.txt 的內容如下,1
2hello world
123456
那麼為什麼開檔失敗就不用 fclose 關檔呢?詳見下一節。
C/C++ fclose 正確的關檔
這邊介紹 C/C++ fclose 正確的關檔方式與技巧,實務上有一些情況可能會導致 fp 為 NULL 而讓 fclose 對 NULL 進行關檔,例如開檔失敗,或其它手動賦值為 NULL 等等情形,那 fclose 對 NULL 進行關檔發生什麼事呢?
這邊示範 fclose 直接對 NULL 關檔看看會怎麼樣,1
2
3
4
5
6
7
8
9
10
11
12
13// g++ cpp-fclose2.cpp -o a.out
int main() {
FILE *fp;
fp = NULL;
// fputs("123", fp); // crash if fp is NULL
fclose(fp); // crash if fp is NULL
return 0;
}
結果程式會中止,產生 Segmentation fault,輸出如下,另外 fputs 寫入到 NULL 的 FILE * 檔案指標也是同樣的結果,1
Segmentation fault (core dumped)
所以在 fclose 關檔時帶入的 FILE * 檔案指標是 NULL 的話就會造成很嚴重的後果,在程式撰寫時要特別小心注意。
以上就是 C/C++ fclose 的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ fopen 用法與範例
C/C++ fread 用法與範例
C/C++ fgets 用法與範例
C/C++ fwrite 用法與範例
C/C++ fputs 用法與範例