程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中前往毛病信息的相干函數用法總結

C說話中前往毛病信息的相干函數用法總結

編輯:關於C++

C說話中前往毛病信息的相干函數用法總結。本站提示廣大學習愛好者:(C說話中前往毛病信息的相干函數用法總結)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中前往毛病信息的相干函數用法總結正文


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 : Success
1 : Operation not permitted
2 : No such file or directory
3 : No such process
4 : Interrupted system call
5 : Input/output error
6 : Device not configured
7 : Argument list too long
8 : Exec format error
9 : 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:success

2: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 值.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved