《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庫函式是相同的 各個作業系統的系統呼叫是不同的 它呼叫函式庫中的一段程式 或函式 它呼叫系統核心的服務 與使用者程式相聯絡 是作業系統的乙個入口點 在使用者位址空間執行 在核心位址空間執行 它的執行時間屬於 使用者時間 它的執行時間屬...