最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言中返回錯(cuò)誤信息的相關(guān)函數(shù)用法總結(jié)

 更新時(shí)間:2015年09月02日 15:29:52   投稿:goldensun  
這篇文章主要介紹了C語(yǔ)言中返回錯(cuò)誤信息的相關(guān)函數(shù)用法總結(jié),包括strerror()函數(shù)和perror()函數(shù)以及ferror()函數(shù)的使用,需要的朋友可以參考下

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

#include <string.h>

定義函數(shù):

char * strerror(int errnum);

函數(shù)說(shuō)明:strerror()用來(lái)依參數(shù)errnum 的錯(cuò)誤代碼來(lái)查詢其錯(cuò)誤原因的描述字符串, 然后將該字符串指針?lè)祷?

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

范例:

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

執(zhí)行:

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語(yǔ)言perror()函數(shù):打印最近一次系統(tǒng)錯(cuò)誤信息
函數(shù)perror()用于拋出最近的一次系統(tǒng)錯(cuò)誤信息,其原型如下:

  void perror(char *string);

【參數(shù)】string為要輸出的錯(cuò)誤信息。

說(shuō)明:perror()用來(lái)將上一個(gè)函數(shù)發(fā)生錯(cuò)誤的原因輸出到標(biāo)準(zhǔn)錯(cuò)誤(stderr)。參數(shù)string所指的字符串會(huì)先打印出,后面再加上錯(cuò)誤原因字符串,此錯(cuò)誤原因依照全局變量errno 的值來(lái)決定要輸出的字符串。

在庫(kù)函數(shù)中有個(gè)errno變量,每個(gè)errno值對(duì)應(yīng)著以字符串表示的錯(cuò)誤類型。當(dāng)你調(diào)用"某些"函數(shù)出錯(cuò)時(shí),該函數(shù)已經(jīng)重新設(shè)置了errno的值。perror函數(shù)只是將你輸入的一些信息和現(xiàn)在的errno所對(duì)應(yīng)的錯(cuò)誤一起輸出。

【實(shí)例】打開(kāi)一個(gè)不存在的文件并輸出錯(cuò)誤信息。

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

運(yùn)行結(jié)果:

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

程序先定義一個(gè)文件指針fp,之后創(chuàng)建文件 test.txt,斷言文件打開(kāi)成功,然后關(guān)閉該文件,再以只讀的方式打開(kāi)文件nulltest.txt,判斷該文件指針是否問(wèn)空,如果為空則使用 perror() 輸出錯(cuò)誤信息。perror()用來(lái)將上一個(gè)函數(shù)發(fā)生錯(cuò)誤的原因 輸出到標(biāo)準(zhǔn)設(shè)備(stderr)。函數(shù)參數(shù)string所指的字符串會(huì)先打印出, 后面再加上錯(cuò)誤原因字符串。此錯(cuò)誤原因依照全局變量error的值來(lái)決定要輸出的字符串。

如果連續(xù)調(diào)用perror,如下:

perror("1");

perror("2");

會(huì)出現(xiàn)以下結(jié)果:

1:success

2:Illegal seek

這種問(wèn)題出現(xiàn)的原因是:

perror()是通過(guò)lseek方法根據(jù)errorno查找對(duì)應(yīng)的錯(cuò)誤信息,然后輸出的。

在程序運(yùn)行的時(shí)候,errorno的初始值對(duì)應(yīng)的信息為:Success。只有程序中有錯(cuò)誤出現(xiàn)時(shí),才會(huì)改變給errorno。如果沒(méi)有錯(cuò)誤出現(xiàn),errorno的值是不會(huì)改變的。

但是perror方法是個(gè)例外,每次調(diào)用perror方法,都會(huì)首先輸出errorno對(duì)應(yīng)的信息,然后重置errorno為undefined,這時(shí)如果馬上在一次調(diào)用perror,perror中的lseek根據(jù)undefined去查找錯(cuò)誤信息,就會(huì)拋錯(cuò),錯(cuò)誤剛好被記錄在errorno中,因此,就把lseek的錯(cuò)誤打印出來(lái)了。所以第一次調(diào)用perror方法的時(shí)候會(huì)正常數(shù)據(jù)錯(cuò)誤信息,但是如果連續(xù)調(diào)用第二次,由于第一次的perror調(diào)用已經(jīng)把errorno設(shè)置成了undefined,所以連續(xù)的第二次,第三次...........第一億次調(diào)用都會(huì)輸出Illegal seek錯(cuò)誤。

C語(yǔ)言ferror()函數(shù):檢查文件流是否有錯(cuò)誤發(fā)生

頭文件:

#include <stdio.h>

定義函數(shù):

int ferror(FILE *stream);

函數(shù)說(shuō)明:ferror()用來(lái)檢查參數(shù)stream 所指定的文件流是否發(fā)生了錯(cuò)誤情況, 如有錯(cuò)誤發(fā)生則返回非0 值.

返回值:如果文件流有錯(cuò)誤發(fā)生則返回非0 值.

相關(guān)文章

  • C語(yǔ)言 fseek(f,0,SEEK_SET)函數(shù)案例詳解

    C語(yǔ)言 fseek(f,0,SEEK_SET)函數(shù)案例詳解

    這篇文章主要介紹了C語(yǔ)言 fseek(f,0,SEEK_SET)函數(shù)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++17?Filesystem?實(shí)用教程

    C++17?Filesystem?實(shí)用教程

    C++17的std::filesystem庫(kù)提供了強(qiáng)大的文件系統(tǒng)操作工具,本文就來(lái)介紹一下C++17?Filesystem?實(shí)用教程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-01-01
  • C語(yǔ)言數(shù)組越界引發(fā)的死循環(huán)問(wèn)題解決

    C語(yǔ)言數(shù)組越界引發(fā)的死循環(huán)問(wèn)題解決

    本文主要介紹了C語(yǔ)言數(shù)組越界引發(fā)的死循環(huán)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++實(shí)現(xiàn)的一個(gè)可以寫(xiě)遞歸lambda的Y函數(shù)

    C++實(shí)現(xiàn)的一個(gè)可以寫(xiě)遞歸lambda的Y函數(shù)

    這篇文章主要介紹了C++實(shí)現(xiàn)的一個(gè)可以寫(xiě)遞歸lambda的Y函數(shù),在Y函數(shù)的幫助,這個(gè)lambda表達(dá)是可以成功看到自己,然后遞歸調(diào)用的,需要的朋友可以參考下
    2014-07-07
  • C語(yǔ)言實(shí)現(xiàn)通訊錄功能的流程與代碼

    C語(yǔ)言實(shí)現(xiàn)通訊錄功能的流程與代碼

    通訊錄是一個(gè)可以記錄親人、好友信息的工具,這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通訊錄管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++臨時(shí)性對(duì)象的生命周期詳細(xì)解析

    C++臨時(shí)性對(duì)象的生命周期詳細(xì)解析

    臨時(shí)性對(duì)象的被摧毀,應(yīng)該是對(duì)完整表達(dá)式(full-expression)求值過(guò)程中的最后一個(gè)步驟。該完整表達(dá)式造成臨時(shí)對(duì)象的產(chǎn)生
    2013-09-09
  • C++如何實(shí)現(xiàn)BCD碼和ASCII碼的相互轉(zhuǎn)換

    C++如何實(shí)現(xiàn)BCD碼和ASCII碼的相互轉(zhuǎn)換

    這篇文章主要介紹了C++實(shí)現(xiàn)BCD碼和ASCII碼互轉(zhuǎn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 詳解C語(yǔ)言中typedef和#define的用法與區(qū)別

    詳解C語(yǔ)言中typedef和#define的用法與區(qū)別

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中typedef和#define的的用法、區(qū)別,以及陷阱。文中通過(guò)示例進(jìn)行了詳細(xì)講解,感興趣的小伙伴可以了解一下
    2022-07-07
  • C語(yǔ)言超詳細(xì)講解數(shù)據(jù)結(jié)構(gòu)中的線性表

    C語(yǔ)言超詳細(xì)講解數(shù)據(jù)結(jié)構(gòu)中的線性表

    線性表,數(shù)據(jù)結(jié)構(gòu)中最簡(jiǎn)單的一種存儲(chǔ)結(jié)構(gòu),專門用于存儲(chǔ)邏輯關(guān)系為"一對(duì)一"的數(shù)據(jù)。線性表是基于數(shù)據(jù)在實(shí)際物理空間中的存儲(chǔ)狀態(tài),又可細(xì)分為順序表(順序存儲(chǔ)結(jié)構(gòu))和鏈表
    2022-05-05
  • C語(yǔ)言實(shí)現(xiàn)控制臺(tái)五子棋小游戲

    C語(yǔ)言實(shí)現(xiàn)控制臺(tái)五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)控制臺(tái)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論

华池县| 无棣县| 上思县| 平顺县| 蓬溪县| 古丈县| 井研县| 大竹县| 健康| 南开区| 离岛区| 丘北县| 九龙城区| 固安县| 岳普湖县| 宣汉县| 平邑县| 宿松县| 大田县| 枣庄市| 铜鼓县| 大邑县| 乐昌市| 全椒县| 陕西省| 乐平市| 安图县| 鲁甸县| 正安县| 墨江| 淮阳县| 冀州市| 望城县| 刚察县| 临安市| 富民县| 新密市| 大洼县| 青海省| 长子县| 汪清县|