Comment on page

9.16. perror(), strerror()

輸出易讀的錯誤訊息字串

函式原型

#include <stdio.h>
#include <string.h> // strerror() 需要
void perror(const char *s);
char *strerror(int errnum);

說明

因為大多的函式錯誤都是傳回 -1,並設定 errno 變數值為某個數,如果你還可以很簡單地印出適合你的格式,這樣就更完美了。
感謝上天,perror() 可以。如果你想要在錯誤訊息前加上一些敘述,你可以將訊息透過 s 參數傳遞(或你可以將 s 參數設定為 NULL,這樣就不會印出額外的訊息)。
簡單說,這個函式透過 errno 值,比如:ECONNRESET,然後印出比較有意義的訊息,像是 "Connection reset by peer"(對方重置連線)。
函式 strerror() 類似 perror(),不同之處是 strerror() 會依據所給的值,傳回一個指向錯誤訊息的指標(通常你會傳 errno 變數)。

傳回值

strerror() 傳回指向錯誤訊息字串的指標。

範例

int s;
s = socket(PF_INET, SOCK_STREAM, 0);
if (s == -1) { // some error has occurred
// 印出 "socket error: " + 錯誤訊息:
perror("socket error");
}
// 類似的
if (listen(s, 10) == -1) {
// 這會印出 "一個錯誤: " + errno 的錯誤訊息:
printf("an error: %s\n", strerror(errno));
}

參考

errno