C語言程式設計之附錄B 標準庫

2021-10-06 07:37:58 字數 3635 閱讀 9666

2、字元類別測試:

標頭檔案中定義的輸入和輸出函式、型別以及巨集的數目幾乎佔整個標準庫的1/3。

流,stream,是與磁碟或其他外圍裝置關聯的資料的源或目的地。

「後3種方式在讀和寫的交叉過程中,必須呼叫fflush函式或檔案定位函式。」

int

fflush

(file* stream)

;//重新整理流 stream 的輸出緩衝區

fflush()會強迫將緩衝區內的資料寫回引數stream 指定的檔案中,fflush(stdout)會清空stdout的緩衝區。

然後有「

stdout通常跟終端相連,通過描述符1。 如果在執行之前被重定向到非終端,那麼printf會進行全緩衝,否則對一行緩衝」。具體而言:

#include

#include

intmain()

return(0);}

如上所示,012會每隔1s被列印出來,而將fflush注釋掉後,則是等待3s之後才全部列印出來。所以說,就是把緩衝區的內容推到stdout中(因此會及時列印出來),然後將其清除,或者說重新整理。emmm,稍微懂一點了。

int

fgetc

(file *stream)

//返回stream流的下乙個字元,返回型別為unsigned char;錯誤返回eof

intfputc

(int c, file *stream)

//把c**換為unsigned char型別)輸出到流stream中,返回寫入的字元,錯誤返回eof

intgetc

(file *stream)

//等價於fgetc

intgetchar

(void

)//等價於getc(stdin)

intputc

(int c, file *stream)

//等價於fputc

intputchar

(int c)

//等價於putc(c, stdout)

intungetc

(int c, file *stream)

//把c**換為unsigned char型別)寫回到流stream中,返回被寫回的字元,錯誤返回eof

然後是比較,嗯,有特點的4個:

//最多讀入n-1個字元。遇到換行符時,將其讀入到陣列s中,讀取過程終止。陣列s以'\0'結尾

char

*fgets

(char

*s,int n, file *stream)

//返回陣列s,到達檔案末尾或發生錯誤返回null

//把s(不包含字元'\n')輸出到流stream中

intfputs

(const

char

*s, file *stream)

//返回乙個非負值,出錯返回eof

//把下乙個輸入行讀入到s中,把末尾換行符替換為字元'\0'

char

*gets

(char

*s)//返回陣列s,到達檔案末尾或發生錯誤返回null

//把s和乙個換行符輸出到stdout中

intputs

(const

char

*s)//返回乙個非負值,出錯返回eof

可以看到它們對最後的換行符的處理,同名的,帶f和不帶f剛好相反,帶/不帶f的也相反。

小插曲:由於gets()不檢查目標陣列是否能夠容納輸入,所以很不安全。的確,幾年前就有人注意到 nuix作業系統中**使用gets(),於是他們利用這個弱點,用很長的輸入覆蓋作業系統的** ,從而發明了在unix網路上傳播的「蠕蟲(worm)」。

//origin取值為seek_set、seek_cur、seek_end

intfseek

(file *stream,

long offset,

int origin)

//出錯返回非0值

long

ftell

(file *stream)

//返回stream流的當前檔案位置,出錯返回-1l

void

rewind

(file *stream)

//rewind(fp)等價於 fseek(fp, 0l, seek_set);clearerr(fp);見下一節

intfgetpos

(file *stream, fpos_t *ptr)

intfsetpos

(file *stream,

const fpos_t *ptr)

「整形表示式errno(在中宣告)可以包含乙個錯誤編號,據此可以進一步了解最近一次出錯的資訊。」

void

clearerr

(file *stream)

//清除與流stream相關的檔案結束符或錯誤指示符(錯誤標誌一旦出現,就一直保留,影響後續檔案的操作)

intfeof

(file *stream)

//如果設定了與stream相關的檔案結束指示符,則返回非0值

intferror

(file *stream)

//發現錯誤,返回乙個非0值

void

perror

(const

char

*s)//列印s以及與errno中整型值相應的錯誤資訊,類似於fprintf(stderr, "%s: %s\n", s, "error message");

好像就這麼乙個巨集

C語言 附錄001 常用函式庫

c語言 附錄001 常用函式庫 2020 3 4 函式庫作用 include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料...

C語言標準庫

ctype.h是c標準函式庫中的標頭檔案 定義了一批c語言字元 分類函式 c character classification functions 用於測試字元是否屬於特定的字元類別,如字母字元 控制字元等等 ctype.h的c標準庫的標頭檔案中提供的宣告幾個有用的函式測試和字元對映。yiibai....

c語言標準庫

c 標準庫的 assert.h標頭檔案提供了乙個名為 assert 的巨集,它可用於驗證程式做出的假設,並在假設為假時輸出診斷訊息。c 標準庫的 ctype.h 標頭檔案提供了一些函式,可用於測試和對映字元。這些函式接受 int 作為引數,它的值必須是 eof 或表示為乙個無符號字元。如果引數 c ...