閱讀優秀原始碼時可能會用的C函式(記錄)

2021-09-12 01:35:40 字數 3244 閱讀 2306

使用 fopen( ) 函式來建立乙個新的檔案或者開啟乙個已有的檔案,這個呼叫會初始化型別 file 的乙個物件,型別 file 包含了所有用來控制流的必要的資訊。下面是這個函式呼叫的原型

file *fopen( const char * filename, const char * mode );

複製**

filename 是字串,用來命名檔案, mode 的值可以是下列值中的乙個:

如果處理的是二進位制檔案,則需使用下面的訪問模式來取代上面的訪問模式:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

複製**

為了關閉檔案,請使用 fclose( ) 函式。函式的原型如下:

int fputc( int c, file *fp );

複製**

如果成功關閉檔案,fclose( ) 函式返回零,如果關閉檔案時發生錯誤,函式返回 eof。這個函式實際上,會清空緩衝區中的資料,關閉檔案,並釋放用於該檔案的所有記憶體。eof 是乙個定義在標頭檔案 stdio.h 中的常量。 c 標準庫提供了各種函式來按字元或者以固定長度字串的形式讀寫檔案。

int fputc( int c, file *fp );

複製**

函式 fputc() 把引數 c 的字元值寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回寫入的字元,如果發生錯誤,則會返回 eof。您可以使用下面的函式來把乙個以 null 結尾的字串寫入到流中:

int fputs( const char *s, file *fp );

複製**

函式 fputs() 把字串 s 寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回乙個非負值,如果發生錯誤,則會返回 eof。您也可以使用 int fprintf(file *fp,const char *format, ...) 函式來寫把乙個字串寫入到檔案中

注意:請確保您有可用的 /tmp 目錄,如果不存在該目錄,則需要在您的計算機上先建立該目錄。

#include 

int main

()複製**

當上面的**被編譯和執行時,它會在 /tmp 目錄中建立乙個新的檔案 test.txt,並使用兩個不同的函式寫入兩行

int fgetc( file * fp );

複製**

fgetc() 函式從 fp 所指向的輸入檔案中讀取乙個字元。返回值是讀取的字元,如果發生錯誤則返回 eof。下面的函式允許您從流中讀取乙個字串:

char *fgets( char *buf, int n, file *fp );

複製**

函式 fgets() 從 fp 所指向的輸入流中讀取 n - 1 個字元。它會把讀取的字串複製到緩衝區 buf,並在最後追加乙個 null 字元來終止字串。 如果這個函式在讀取最後乙個字元之前就遇到乙個換行符 '\n' 或檔案的末尾 eof,則只會返回讀取到的字元,包括換行符。您也可以使用 int fscanf(file *fp, const char *format, ...) 函式來從檔案中讀取字串,但是在遇到第乙個空格字元時,它會停止讀取。

#include 

int main

()複製**

1 : this

2: is testing for fprintf...

3: this is testing for fputs...

複製**

首先,fscanf() 方法只讀取了 this,因為它在後邊遇到了乙個空格。其次,呼叫 fgets() 讀取剩餘的部分,直到行尾。最後,呼叫 fgets() 完整地讀取第二行。

二進位制 i/o 函式 下面兩個函式用於二進位制輸入和輸出:

ize_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, file *a_file);

size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, file *a_file);

複製**

這兩個函式都是用於儲存塊的讀寫 - 通常是陣列或結構體。

fseek 可以移動檔案指標到指定位置讀,或插入寫:

int fseek(file *stream, long offset, int whence);

複製**

fseek 設定當前讀寫點到 offset 處, whence 可以是 seek_set,seek_cur,seek_end 這些值決定是從檔案頭、當前點和檔案尾計算偏移量 offset。 你可以定義乙個檔案指標 file *fp,當你開啟乙個檔案時,檔案指標指向開頭,你要指到多少個位元組,只要控制偏移量就好,例如, 相對當前位置往後移動乙個位元組:fseek(fp,1,seek_cur); 中間的值就是偏移量。 如果你要往前移動乙個位元組,直接改為負值就可以:fseek(fp,-1,seek_cur)。 執行以下例項前,確保當前目錄下 test.txt 檔案已建立:

#include 

int main

()

fclose(fp);

}複製**

執行結束後,開啟 test.txt 檔案:

this is teating for fprintf...

複製**

注意: 只有用 r+ 模式開啟檔案才能插入內容,w 或 w+ 模式都會清空掉原來檔案的內容再來寫,a 或 a+ 模式即總會在檔案最尾新增內容,哪怕用 fseek() 移動了檔案指標位置。

字串常用的函式

#include 

#include

int main

()複製**

執行結果

strcpy( str3, str1) :  hello

strcat( str1, str2): helloworld

strlen(str1) : 10

複製**

c 標準庫

c 標準庫

閱讀優秀原始碼時可能會用的C函式(記錄)

使用 fopen 函式來建立乙個新的檔案或者開啟乙個已有的檔案,這個呼叫會初始化型別 file 的乙個物件,型別 file 包含了所有用來控制流的必要的資訊。下面是這個函式呼叫的原型 file fopen const char filename,const char mode 複製 filename...

斷點怎樣不進入原始碼 如何閱讀優秀的原始碼(心得)

如何閱讀優秀的原始碼 心得 在上學那會呢,就挺感興趣對閱讀原始碼,為什麼呢?作為一名程式設計師,也想寫出跟比爾呢一樣牛的 為人所用啊。我也想變得優秀。但是那會真是有心無力啊,基礎沒有,經驗沒有,對程式設計的認知低,領悟能力差。連個增刪改都不能很清晰的寫出來。還閱讀原始碼呢,這就是寸步難行啊。沒有辦法...

翻譯 做CSS精簡時可能會用到的正規表示式

原文 注意 本文提到的正規表示式都使用了ignorecase true選項。我觀察了yui compressor中用於精簡css的正規表示式,並給出了一些我認為能有助於這一工作的其他正規表示式。我所看到的 已經能夠通過簡單的字串替換修剪掉 上 右 下 左 值中不必要的零值。但這是通過三個獨立的替換操...