国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言中返回錯誤信息的相關函數用法總結

2020-01-26 14:54:29
字體:
來源:轉載
供稿:網友

C語言strerror()函數:返回錯誤原因的描述字符串
頭文件:

#include <string.h>

定義函數:

char * strerror(int errnum);

函數說明:strerror()用來依參數errnum 的錯誤代碼來查詢其錯誤原因的描述字符串, 然后將該字符串指針返回.

返回值:返回描述錯誤原因的字符串指針.

范例:

/* 顯示錯誤代碼0 至9 的錯誤原因描述 */#include <string.h>main(){  int i;  for(i = 0; i < 10; i++)  printf("%d : %s/n", i, strerror(i));}

執行:

0 : Success1 : Operation not permitted2 : No such file or directory3 : No such process4 : Interrupted system call5 : Input/output error6 : Device not configured7 : Argument list too long8 : Exec format error9 : Bad file descriptor

C語言perror()函數:打印最近一次系統錯誤信息
函數perror()用于拋出最近的一次系統錯誤信息,其原型如下:

  void perror(char *string);

【參數】string為要輸出的錯誤信息。

說明:perror()用來將上一個函數發生錯誤的原因輸出到標準錯誤(stderr)。參數string所指的字符串會先打印出,后面再加上錯誤原因字符串,此錯誤原因依照全局變量errno 的值來決定要輸出的字符串。

在庫函數中有個errno變量,每個errno值對應著以字符串表示的錯誤類型。當你調用"某些"函數出錯時,該函數已經重新設置了errno的值。perror函數只是將你輸入的一些信息和現在的errno所對應的錯誤一起輸出。

【實例】打開一個不存在的文件并輸出錯誤信息。

#include <stdio.h>#include <assert.h>#include <stdlib.h>int main( void ){  FILE *fp;  fp = fopen( "test.txt", "w" );/*打開文件*/  assert( fp ); /*斷言不為空*/  fclose( fp );/*關閉*/  fp = fopen( "nulltest.txt", "r" );/*打開一個不存在的文件*/  if ( NULL == fp )  {    /*顯示最近一次錯誤信息*/    perror("fopen( /"nulltest.txt/", /"r/" )");  }  return 0;}

運行結果:

fopen( "nulltest.txt", "r" ):No such file or directory

程序先定義一個文件指針fp,之后創建文件 test.txt,斷言文件打開成功,然后關閉該文件,再以只讀的方式打開文件nulltest.txt,判斷該文件指針是否問空,如果為空則使用 perror() 輸出錯誤信息。perror()用來將上一個函數發生錯誤的原因 輸出到標準設備(stderr)。函數參數string所指的字符串會先打印出, 后面再加上錯誤原因字符串。此錯誤原因依照全局變量error的值來決定要輸出的字符串。

如果連續調用perror,如下:

perror("1");perror("2");

會出現以下結果:

1:success2:Illegal seek

這種問題出現的原因是:

perror()是通過lseek方法根據errorno查找對應的錯誤信息,然后輸出的。

在程序運行的時候,errorno的初始值對應的信息為:Success。只有程序中有錯誤出現時,才會改變給errorno。如果沒有錯誤出現,errorno的值是不會改變的。

但是perror方法是個例外,每次調用perror方法,都會首先輸出errorno對應的信息,然后重置errorno為undefined,這時如果馬上在一次調用perror,perror中的lseek根據undefined去查找錯誤信息,就會拋錯,錯誤剛好被記錄在errorno中,因此,就把lseek的錯誤打印出來了。所以第一次調用perror方法的時候會正常數據錯誤信息,但是如果連續調用第二次,由于第一次的perror調用已經把errorno設置成了undefined,所以連續的第二次,第三次...........第一億次調用都會輸出Illegal seek錯誤。

C語言ferror()函數:檢查文件流是否有錯誤發生

頭文件:

#include <stdio.h>

定義函數:

int ferror(FILE *stream);

函數說明:ferror()用來檢查參數stream 所指定的文件流是否發生了錯誤情況, 如有錯誤發生則返回非0 值.

返回值:如果文件流有錯誤發生則返回非0 值.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 沈丘县| 红原县| 尼木县| 额尔古纳市| 麻栗坡县| 东明县| 来凤县| 珠海市| 和硕县| 聂拉木县| 枣强县| 商洛市| 衡南县| 普安县| 清徐县| 惠水县| 内丘县| 毕节市| 光山县| 奉化市| 沁源县| 宝兴县| 汪清县| 景洪市| 磐石市| 仙游县| 达孜县| 朝阳区| 汝南县| 简阳市| 稻城县| 大足县| 杭锦旗| 黑龙江省| 玉环县| 化德县| 雅江县| 运城市| 阜新| 监利县| 南涧|