簡體   English   中英

錯誤:perror 和 fprintf 之間的區別

[英]Error: difference between perror and fprintf

遇到錯誤時以下兩種方法有什么區別?

if (!mallocd_buffer) {

    // this?
    fprintf(stderr,"malloc() failed in file %s at line # %d", __FILE__, __LINE__);

    // or this?
    perror("Failed to copy a string\n\n\n\n\n");

    exit(EXIT_FAILURE);
}

使用perror ,您會在作為參數提供的字符串之后獲得 output 中errno的當前值所暗示的系統錯誤消息。

使用fprintf(stderr, "…", …) ,您可以完全控制格式。

我很少使用perror() 它不符合我的要求,因為格式化要傳遞給它的字符串很繁瑣。 我使用我編寫的函數,例如err_syserr() — 代碼在我的 GitHub 上的SOQ (堆棧溢出問題)存儲庫中作為文件stderr.cstderr.hsrc/libsoq子目錄中可用。

在 BSD 上,有一個類似的 package 稱為err(3) 你也可以在 Linux 上找到它(參見err(3) )。 您可能會更喜歡在我的代碼上使用它,如果只是因為系統函數設法間接了解argv[0]的值,而我的代碼不是因為沒有可移植的接口來訪問argv[0]除了通過 arguments 到main()之外,因此我的代碼依賴於您在main()中調用err_setarg0(argv[0])來設置程序名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM