CPrimerPlus學習(十三) 檔案輸入輸出

2021-10-06 23:32:29 字數 2182 閱讀 7928

//程式清單13.1 count.c程式

/* count.c -- 使用標準 i/o */

#include

#include

// 提供 exit()的原型

intmain

(int argc,

char

*ar**)

if((fp =

fopen

(ar**[1]

,"r"))

==null

)while

((ch =

getc

(fp))!=

eof)

fclose

(fp)

;printf

("file %s has %lu characters\n"

, ar**[1]

, count)

;return0;

}

該程式使用fopen()函式開啟檔案。

該函式宣告 在stdio.h中。

它的第1個引數是待開啟檔案的名稱,更確切地說是乙個包含改檔名的字串位址。

第2個引數是乙個字串,指定待開啟檔案的模式。

表13.1列出了c庫提供的一些模式。

新的c11新增了帶x字母的寫模式,與以前的寫模式相比具有更多特性。

第一,如果以傳統的一種寫模式開啟乙個現有檔案,fopen()會把該檔案的長度截為 0,這樣就丟失了該檔案的內容。

但是使用帶 x字母的寫模式, 即使fopen()操作失敗,原檔案的內容也不會被刪除。

第二,如果環境允許, x模式的獨佔特性使得其他程式或執行緒無法訪問正在被開啟的檔案。

警告如果使用任何一種"w"模式(不帶x字母)開啟乙個現有檔案,該檔案的內容會被刪除,以便程式在乙個空白檔案中開始操作。

然而,如果使用帶x字母的任何一種模式,將無法開啟乙個現有檔案。

程式成功開啟檔案後,fopen()將返回檔案指標(file pointer),其他i/o函式可以使用這個指標指定該檔案。

檔案指標(該例中是fp)的型別是指向 file的指標,file是乙個定義在stdio.h中的派生型別。

檔案指標fp並不指向實際的檔案,它指向乙個包含檔案資訊的資料物件,其中包含操作檔案的 i/o函式所用的緩衝區資訊。

因為標準庫中的i/o函式使用緩衝區,所以它們不僅要知道緩衝區的位置,還要知道緩衝區被填充的程度以及操作哪乙個檔案。

標準i/o函式根據這些資訊在必要時決定再次填充或清空緩衝區。

fp指向的資料物件包含了這些資訊(該資料物件是乙個 c結構,將在第14章中介紹)。

getc()和putc()函式與getchar()和putchar()函式類似。

所不同的是,要告訴 getc()和putc()函式使用哪乙個檔案。

下面這條語句的意思是「從標準輸入中獲取乙個字元」:

ch = getchar();

然而,下面這條語句的意思是「從fp指定的檔案中獲取乙個字元」:

ch = getc(fp);

與此類似,下面語句的意思是「把字元ch放入file指標fpout指定的檔案中」:

putc(ch, fpout);

在putc()函式的引數列表中,第1個引數是待寫入的字元,第2個引數是檔案指標。

程式清單13.1把stdout作為putc()的第2個引數。stdout作為與標準輸出相關聯的檔案指標,定義在stdio.h中,所以putc(ch, stdout)與putchar(ch)的作用相同。

實際上,putchar()函式一般通過putc()來定義。

與此類似,getchar()也 通過使用標準輸入的getc()來定義。

fclose(fp)函式關閉fp指定的檔案,必要時重新整理緩衝區。

對於較正式的程式,應該檢查是否成功關閉檔案。

如果成功關閉,fclose()函式返回0,否則返回eof:

if (fclose(fp) != 0)

printf("error in closing file %s\n", ar**[1]);

如果磁碟已滿、行動硬碟被移除或出現i/o錯誤,都會導致呼叫fclose() 函式失敗。

C Primer Plus學習 四十三 結構變數

結構宣告 structuredeclaration 是描述結構如何組合的主要方法。宣告就像下面這樣 struct book 詞語 結構 structure 有兩個意思。個意思是 結構設計 這個我們剛剛已經討論過了。結構 設計告訴編譯器如何表 示資料,但是它沒有讓計算機為資料分配空間。下 步是建立乙個...

C Primer Plus 第十三章筆記

1.使用公有派生,基類的公有成員將成為派生類的共有成員 基類的私有部分也將成為派生類的一部分,但只能通過基類的公有和保護方法訪問。2.派生類建構函式必須使用基類建構函式,意味著基類物件應當在程式進入派生類建構函式之前被建立。如果不呼叫基類建構函式,程式將使用預設的基類建構函式。3.可將派生類物件和位...

c primer plus學習筆記

1.變數名命名規則 重要的 1 有含義 2 只能用字母字元 數字和下劃線 3 第乙個字元不能是數字 4 區分大小寫 5 不能用c 關鍵字 2.整型 1 無符合型別不能表負值 2 char short 16 int short long 32,int 和longlong 64,long c 11 寬度...