perror()函數的使用

        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的使用》。