perror()函式的功能是列印一個系統錯誤資訊。
perror()函式在Linux系統中屬於庫函式,在標頭檔案中有如下定義:
#include <stdio.h>
void perror(const char *s);
perror()函式的使用細節
當程式的當前函式(這類函式包括系統函式和庫函式)出現錯誤,會將錯誤值儲存在errno這個全域性變數中,然後當程式執行到perror()函式的時候,會先列印引數s中的字串,接著列印一個冒號,和errno值對應的錯誤描述字串。因此在使用perror()函式的時候也要引用標頭檔案errno.h,因為errno這個全域性變數定義在這個標頭檔案中。
這其中也隱含這一個使用技巧,就是s引數字串應該包含導致錯誤的函式的名稱。這樣在列印錯誤資訊的時候,會使定位的錯誤位置更加準確。
同時也要注意一個問題,就是在函式執行成功的時候,不要呼叫perror()函式,因為在函式成功執行的時候errno是未定義的變數,即便打印出錯誤資訊,也是它在內部使用了其他失敗的庫函式。例如:
1 int * p = NULL;
2 p = (int *)malloc(sizeof(int));
3 if(p == NULL)
4 {
5 perror("malloc error , no memory");
6 exit(1);
7 }
上述程式是申請動態記憶體,如果申請失敗即p指標為空,則呼叫perror()函式列印錯誤資訊。千萬不要在p!=NULL的時候呼叫perror()函式,此時malloc()函式執行成功,已經申請到記憶體並返回指標給p,p不為空。
errno的錯誤字串是英文縮寫,若要查閱具體的錯誤可參閱《errno的使用》。