[英]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.c
和stderr.h
在src/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.