我知道,這兩個可以作爲錯誤信息的工作,perror和fprintf與stderr有什麼區別?
perror(" ");
fprintf(stderr, " ");
但什麼是真正的它們之間的差異?各自的優點/缺點是什麼?
我知道,這兩個可以作爲錯誤信息的工作,perror和fprintf與stderr有什麼區別?
perror(" ");
fprintf(stderr, " ");
但什麼是真正的它們之間的差異?各自的優點/缺點是什麼?
的PERROR()函數將映射通過 符號errno爲語言相關的錯誤消息,訪問的錯誤編號,其將被 寫入標準錯誤流如下:
首先(如果s是不是一個空指針和字符指向s不是空字節),該字符串指向秒,然後一個 <結腸>和<空間>。
然後出現錯誤消息字符串,然後是<換行符>。
錯誤消息的字符串的內容應是相同 由字符串錯誤()返回的帶有參數的errno。
所以,
perror(" ");
會發出類似
: invalid argument
到stderr
,取決於errno
當前值。
但
fprintf(stderr, " ");
將僅發射空格字符stderr
,而不是打印當前errno
值的字符串表示。
fprintf(stderr, " ");
孤立是很無用的。 perror(" ");
將提供有關當前值errno
的數據。
因此,使用perror驗證函數返回值將永遠是好的做法,perror會自動發送到stderr而不傳遞任何參數 –
@jorgesaraiva一般來說,是的,因爲這會給你一些指示*爲什麼*失敗。 –
這只是你不能將格式參數傳遞給'perror'。所以它稍快... –
'perror(「foo」)'基本上等於'fprintf(stderr,「foo:%s \ n」,strerror(errno))''。我喜歡使用'fprintf(stderr,「foo:%s。\ n」,strerror(errno))',但僅僅是因爲'perror()'輸出末尾沒有'.'會導致我錯誤。請記住,如果遇到* fatal *錯誤,例如'malloc()'失敗,或者程序無法打開所需的文件,則需要*報告錯誤並使用exit退出程序(EXIT_FAILURE);'或'abort();'。 –