首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言入門

C 標準庫錯誤報告機制:errno、strerror 與 perror 完整指南

     編輯:C 語言入門

三大錯誤報告介面

介面頭文件功能
errno<errno.h>外部整數變數,保存最近一次庫函數錯誤碼(正整數,E* 宏)
strerror(int)<string.h>將錯誤碼轉為人類可讀字串,返回靜態緩衝區指標
perror(const char*)<stdio.h>向標準錯誤輸出「前綴: 錯誤描述\n」,前綴為傳入字串

正確使用模式

  1. 呼叫庫函數前將 errno = 0 清零。
  2. 呼叫後檢查 errno 是否非零。
  3. 非零時依需求輸出:perror 簡單直接,strerror 靈活嵌入自訂格式。

完整範例:數學定義域錯誤

#include 
#include 
#include 
#include 

int main(void) {
    errno = 0;
    double r = sqrt(-1.0);           // 定義域錯誤,設置 errno = EDOM (33)
    if (errno) {
        printf("errno = %d\n", errno);                 // 33
        perror("sqrt failed");                         // sqrt failed: Numerical argument out of domain
        printf("error: %s\n", strerror(errno));        // error: Numerical argument out of domain
    }
    return 0;
}

關鍵細節

  • errno 為執行緒局部儲存(現代實現),多執行緒安全。
  • strerror 返回的字串指標指向靜態緩衝區,後續呼叫會覆蓋,需立即複製若要保留。
  • perror(NULL) 或 perror("") 僅輸出錯誤描述,無前綴與冒號。
  • 標準 C 僅保證 EDOM、ERANGE 兩宏,其他錯誤碼視實現定義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved