C指標詳解五

2021-09-21 07:41:25 字數 3844 閱讀 3017

2、檔案的讀寫函式

(2)字串輸入輸出

3、檔案讀寫操作的內部機制

4、順序讀寫操作

5、隨機讀寫操作

file *fp;
fopen函式用來開啟檔案,其在stdio.h中,一般呼叫形式為

file *fp;

fp=fopen(「檔名」,「使用檔案的方式」);

其中開啟檔案的方式有如下幾種

例如用只寫的方式開啟檔案1.txt

file *fp;

fp=fopen("1.txt","w");

如果fopen成功開啟檔案,則返回乙個有確定指向的指標;如果開啟失敗,則返回null。

檔案的關閉需要使用fclose函式,其也在stdio.h中,使用方式如下

fclose(檔案指標);

例如:fclose(fp);

如果正常完成檔案關閉,則返回乙個值是0,否則返回eof(end of file)

說明:在程式結束之前需要關閉檔案,目的是為了防止因為沒有關閉檔案造成資料損壞。

檔案順序操作

對檔案的操作(檔案讀寫)必須按檔案中字元的先後順序進行,只能在操作了第i個字元之後,才能操作第i+1個字元。 在對檔案操作時,檔案的位置指標由系統自動向後(檔案尾的方向)移動

進行順序操作的函式

字元輸入輸出函式fgetc fputc

字串輸入輸出函式fgets fputs

格式化輸入輸出函式fscanf fprintf

資料塊輸入輸出函式fread fwrite

輸入函式:

ch=fgetc(fp);     /*fp 為已經開啟的檔案的指標 */
函式功能:

從指定的檔案中讀取乙個字元。即:從fp所指向的檔案 ( 該檔案必須是以讀或讀寫方式開啟的 )中讀取乙個字元返回 ,讀取的字元賦給變數ch。

對於ascii檔案,若讀取字元時檔案已經結束或出錯,則返回檔案結束標記eof(-1)。

輸出函式:

fputc(ch,fp);     /*ch為需要輸出的字元*/
函式功能:

將乙個字元輸出到指定檔案中。即將字元變數ch中的字元 輸出到所指向的檔案。

若輸出操作成功,該函式返回輸出的字元;否則,返回eof。

輸入函式:

fgets(s,n,fp) ;
其中引數:char s;int n;file *fp;

函式功能:

陣列s已經定義,從fp所指向的檔案中讀取長度不超過n-1個字元的字串,並將該字串放到字元陣列s中。函式的返回值為字元陣列 s的首位址;如果檔案結束或出錯,則返回null 。

fgets(s,n,fp)

情況1:已讀入n-1個字元,

則:s中存入n-1個字元,串尾為\0

情況2:讀入字元遇到\n,

則:s中存入實際讀入的字元,串尾為\n\0

情況3:讀入字元遇到檔案尾

則:s中存入實際讀入的字元,eof不會存入陣列,串尾為\0

情況4:當檔案已經結束時,繼續讀檔案

則:函式的返回值為null,表示檔案結束

輸出函式:

函式格式:

fputs(s,fp);
引數:chars;file*fp;

函式功能:將字元陣列s中的字串寫入檔案指標fp所指的檔案中 。

說明:第乙個引數可以是字串常量、字元陣列名或字元型指標。字串末尾的『\0』不輸 出。

返回值:輸入成功,返回值為0; 輸入失敗,返回eof。

格式化輸入輸出函式

輸入函式 :

fscanf(fp,格式控制符,變數位址表);
引數:file *fp;

函式功能:從fp所指向的ascii檔案中讀取字元,按格式控制符的含義存入對應的變數中,返回值為輸入的資料個數。

fscanf與scanf類似格式控制符相同。

輸出函式:

fprintf(fp,格式控制符,表示式列表);
引數:file*fp;

函式功能:將表示式列表中的資料,按照格式控制符的說明,存入fp所指向的ascii檔案中,返回值為實際存入的資料個數。

fprintf與printf類似,格式控制符相同。

資料塊輸入輸出

輸入函式:

fread(buffer, size, count, fp);
引數:char * buffer; unsigned size; intcount; file *fp; 函式功能:從二進位制檔案fp中讀取count個資料塊存入buffer中, 每個資料塊的大小為size個位元組。操作成功,函式的返回值為實 每個資料塊的大小為size個位元組。操作成功,函式的返回值為實 際讀入的資料塊的數量;若檔案結束或出錯,返回值為0。

輸出函式:

fwrite(buffer, size, count, fp);
引數:char * buffer; unsigned size; int count; file *fp; 函式功能: 將buffer中的count個資料塊寫入二進位制檔案fp中,每個資料塊的大小為size個位元組。操作成功,函式的返回值為實際寫入檔案的資料塊的數量;若檔案結束或出錯返回值為0。

檔案的讀寫是通過檔案系統內部的「位置指標」進行的。 當開啟乙個檔案時,系統自動為開啟的檔案建立乙個位置指 針,對該檔案的讀寫操作均通過位置指標進行操作。

fopen後位置指標指向檔案中第1個(將要讀寫)位元組。

檔案結束時,位置指標指向檔案最後1個位元組的下1個位置 。

 順序讀寫操作 在順序讀寫檔案時,檔案的位置指標由系統自動控制,每 次讀寫操作後系統都會將位置指標移到下個資料的位置 次讀寫操作後,系統都會將位置指標移到下乙個資料的位置。 在不改變位置指標的情況下,只能對檔案進行順序操作。

隨機讀寫操作 通過改變檔案的位置指標,可在檔案的任意位置進行讀寫 操作 操作。

函式格式:

fseek(fp,offset,position);

/* file*fp;

long offset;

int position; */

函式功能:將指定檔案fp的檔案位置指標按照position規定的方式移動offset個位元組。移動成功返回值為0;否則,返回值為非0。

position為起始點,指出以檔案的什麼位置為基準進行移動:

0──檔案的開頭;

1──檔案的當前位置;

2──檔案的末尾。

fseek(fp,50,0)從檔案頭開始向前(檔案尾方向)移動50個位元組

fseek(fp,-10,1)從當前位置向後(檔案頭方向)移動10個位元組

fseek(fp,-20,2)從檔案尾開始向後(檔案頭方向)移動20個位元組

rewind(fp) 

/* file*fp; */

函式功能:使fp指定的檔案的位置指標重新定位到檔案的頭位置。

ftell(fp)  

/* file*fp; */

函式功能:得到fp所指向檔案的當前讀寫位置,即位置指標的當前值。

該值是乙個長整型數,是位置指標從檔案開始處到當前位置的位移量的位元組數。如果函式的返回值為1l,表示出錯。

C 指標詳解

指標是乙個特殊的變數,它裡面儲存的數值被解釋為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者指標所指向的記憶體區,還有指標本身所佔據的記憶體區。去掉宣告中指標的名字,剩下的就是指標的型別。例如 int ptr 指標的型別是int char p...

C 指標詳解

前言 今天發現自己對c 了解得還不夠深刻,毅然決定重新補充c 指標的知識。一直在論壇裡聽別人說沒有幾個人真正的會用指標,我居然懷疑了一下自己,好吧。惡補唄,順便寫篇部落格祭奠一下,這篇文章適合非小白看,我只是把容易錯的點補充了。1.資料在記憶體中是如何儲存的 在編譯時就會系統就會給變數分配記憶體空間...

詳解C指標

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體 使用者空間的虛擬記憶體 裡的乙個位址。乙個指標包含四個方面的內容 指標的型別 指標所指向的型別 指標所指向的記憶體區 指標本身所佔據的記憶體區。接下來就下面幾個例子作說明 1 int p 2 char p 3 int p 4 int p 3 5...