//程式清單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 寬度...