《C陷阱與缺陷》第五章

2021-08-20 15:23:42 字數 880 閱讀 5474

《c陷阱與缺陷》第五章--庫函式

5.1,返回整數的getchar函式

在c語言的庫函式中,將getchar函式的返回值定義為int(防止char溢位,例如char表示不了eof)。

5.2、更新順序檔案

根據c語言庫函式中的fread(),fwrite().fseek()函式的用法,在fread和fwrite函式交替呼叫時,每次都要使用fseek()來改變檔案指標的性質。

根據周文導師的說法:

多數情況下,磁碟檔案操作對流的讀操作發生在流的開頭,寫操作發生在流的末尾,寫後的流一般不可讀(末尾),而讀後的流不適宜寫(會覆蓋後面內容),所以讀寫交替時要用fseek等重新定位到乙個可讀或可寫的位置,這是指導性原則,本質上只能算是半雙工。

只好的辦法就是簡單化,讀寫用開啟不同的檔案控制代碼,相關函式都會加鎖,不要同時讀寫。

5.3、緩衝輸出與記憶體分配

在需要緩衝輸出的場景下c語言定義了setbuf(stdout,buf)庫函式來設定輸出的緩衝區。

但使用時容易出現錯誤。如果buf定義在main函式裡面、則有可能main函式結束時就將buf分配在棧上的空間清空,但是資料還沒有重新整理出來。

解決方法就是將buf定義在函式外,或定義為靜態緩衝區。

5.4、使用error檢測錯誤

單純使用庫函式error依然會有許多陷阱。因為不知道程式會在哪可能重新設定error的值,根據書上描述,一般採用以下形式。

#include

intmain

(void)

}

5.5、庫函式signal

signal訊號的處理函式,不應該使用包含signal訊號處理的函式,會引起遞迴呼叫。

在定義處理函式時,要盡力簡單。

C陷阱與缺陷 第五章 庫函式

有關庫函式的使用,最好的建議是盡量使用系統標頭檔案。因為標頭檔案中包括了庫函式的引數型別和返回型別的宣告。5.1 返回整數的getchar的函式 include main getchar函式一般的情況下返回的是標準輸入檔案中的下乙個字元,當沒有輸入時,返回eof。但由於 c 宣告成了char 型別,...

第五章軟體缺陷管理

軟體缺陷產生原因 大多數軟體缺陷並不是由於編碼造成的,導致大多數軟體缺陷產生的最大的原因是需求分析階段,其次是在軟體設計階段 符合下面 5個規則中的乙個,就是軟體缺陷 軟體未實現產品說明書要求的功能 軟體出現了產品說明書指明不應該出現的錯誤 軟體實現了產品說明書未提到的功能 軟體未實現產品說明書雖未...

C陷阱與缺陷(五)

庫函式 函式庫呼叫 系統呼叫 在所有的ansi c編譯器版本中,c庫函式是相同的 各個作業系統的系統呼叫是不同的 它呼叫函式庫中的一段程式 或函式 它呼叫系統核心的服務 與使用者程式相聯絡 是作業系統的乙個入口點 在使用者位址空間執行 在核心位址空間執行 它的執行時間屬於 使用者時間 它的執行時間屬...