在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言errno、perror()和strerror()

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-11-12 15:01 ? 次閱讀

C語言不提供對錯誤處理的直接支持,但是作為一種系統編程語言,它以返回值的形式允許您訪問底層數據。在發生錯誤時,大多數的 C 或 UNIX 函數調用返回 1 或 NULL,同時會設置一個錯誤代碼errno,該錯誤代碼是全局變量,表示在函數調用期間發生了錯誤。您可以在 errno.h 頭文件中找到各種各樣的錯誤代碼。

所以,C 程序員可以通過檢查返回值,然后根據返回值決定采取哪種適當的動作。開發人員應該在程序初始化時,把 errno 設置為 0,這是一種良好的編程習慣。0 值表示程序中沒有錯誤。

errno、perror() 和 strerror()

C 語言提供了perror()和strerror()函數來顯示與errno相關的文本消息。

perror()函數顯示您傳給它的字符串,后跟一個冒號、一個空格和當前 errno 值的文本表示形式。

strerror()函數,返回一個指針,指針指向當前 errno 值的文本表示形式。

讓我們來模擬一種錯誤情況,嘗試打開一個不存在的文件。您可以使用多種方式來輸出錯誤消息,在這里我們使用函數來演示用法。另外有一點需要注意,您應該使用stderr文件流來輸出所有的錯誤。

#include#include#includeexternint errno ;int main (){ FILE * pf; int errnum; pf = fopen ("unexist.txt","rb"); if(pf == NULL) { errnum = errno; fprintf(stderr,"錯誤號: %d\n", errno); perror("通過 perror 輸出錯誤"); fprintf(stderr,"打開文件錯誤: %s\n", strerror( errnum )); } else { fclose (pf); } return0;}

當上面的代碼被編譯和執行時,它會產生下列結果:

錯誤號:2通過 perror 輸出錯誤:No such file or directory打開文件錯誤:No such file or directory

被零除的錯誤

在進行除法運算時,如果不檢查除數是否為零,則會導致一個運行時錯誤。

為了避免這種情況發生,下面的代碼在進行除法運算前會先檢查除數是否為零:

#include#includemain(){ int dividend =20; int divisor =0; int quotient; if( divisor ==0){ fprintf(stderr,"除數為 0 退出運行...\n"); exit(-1); } quotient = dividend / divisor; fprintf(stderr,"quotient 變量的值為 : %d\n", quotient ); exit(0);}

當上面的代碼被編譯和執行時,它會產生下列結果:

除數為0退出運行...

程序退出狀態

通常情況下,程序成功執行完一個操作正常退出的時候會帶有值 EXIT_SUCCESS。在這里,EXIT_SUCCESS 是宏,它被定義為 0。

如果程序中存在一種錯誤情況,當您退出程序時,會帶有狀態值 EXIT_FAILURE,被定義為 -1。所以,上面的程序可以寫成:

#include#includemain(){ int dividend =20; int divisor =5; int quotient; if( divisor ==0){ fprintf(stderr,"除數為 0 退出運行...\n"); exit(EXIT_FAILURE); } quotient = dividend / divisor; fprintf(stderr,"quotient 變量的值為: %d\n", quotient ); exit(EXIT_SUCCESS);}

當上面的代碼被編譯和執行時,它會產生下列結果:

quotient 變量的值為:4

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程語言
    +關注

    關注

    10

    文章

    1955

    瀏覽量

    36250
  • 函數
    +關注

    關注

    3

    文章

    4372

    瀏覽量

    64367

原文標題:C語言中的錯誤處理機制

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    關于linuxsocket非阻塞編程問題,server無法收到client的信息?

    ) {perror("malloc");exit (-1);}bzero(buffer,BUFFER+1);c_fd=socket(AF_INET,SOCK_STREAM,0);if(!c
    發表于 10-26 17:27

    server在非阻塞下收不到client的數據

    ) {perror("malloc");exit (-1);}bzero(buffer,BUFFER+1);c_fd=socket(AF_INET,SOCK_STREAM,0);if(!c
    發表于 10-26 17:37

    基于嵌入式Linux的網絡通信系統(源代碼+報告文檔)

    ,errno message is '%s'\n",buf,errno,strerror(errno));break; } bzero(buf,MAXBUF+1); len=recv
    發表于 07-03 01:14

    berkeley_api到errno.h還是sys/errno.h?

    你好!沒有檢查這個問題是否是特定的,也影響了C32的整體。總之:在berkeley_api.c文件中,包含兩個版本的errno.h。includeinclude嗯!兩者都定義了EPREM的不同值
    發表于 09-24 10:35

    優秀的項目都使用最精簡的設計

    ) pError("lock %s queueMutex failed, reason:%s", pSched->label, strerror(errno
    發表于 09-19 16:10

    C語言基礎教材

    目錄 C語言基礎知識  C 語言簡介  C 語言的特點… 
    發表于 11-24 16:20 ?1902次下載

    C語言簡單概述

    C語言簡介C語言簡介C語言簡介C
    發表于 11-20 14:14 ?0次下載

    C語言入門經典-C語言編程

    C語言入門經典-C語言編程,感興趣的可以看看哦。
    發表于 08-16 18:54 ?130次下載

    C51單片機C語言與標準C語言有什么區別?

    一:C51(單片機C語言)與標準C語言的區別1、 C51語言
    發表于 10-09 08:00 ?134次下載
    <b class='flag-5'>C</b>51單片機<b class='flag-5'>C</b><b class='flag-5'>語言</b>與標準<b class='flag-5'>C</b><b class='flag-5'>語言</b>有什么區別?

    單片機C語言C語言為什么有差異?

    許多小伙伴在學完C語言后想入門單片機,但學著學著發現明明都是C語言,為什么單片機C語言和我當初學
    發表于 09-01 16:39 ?3956次閱讀

    標準c語言與嵌入式,嵌入式C語言C語言的區別

    嵌入式C語言C語言的區別:最常用的系統編程語言C,它是在匯編
    發表于 10-20 14:06 ?6次下載
    標準<b class='flag-5'>c</b><b class='flag-5'>語言</b>與嵌入式,嵌入式<b class='flag-5'>C</b><b class='flag-5'>語言</b>與<b class='flag-5'>C</b><b class='flag-5'>語言</b>的區別

    C51語言

    C51語言C51語言與標準C語言間有許多相同地方,但也有自身特點。不同的嵌入式
    發表于 11-21 15:21 ?26次下載
    <b class='flag-5'>C</b>51<b class='flag-5'>語言</b>

    單片機c語言+編程c語言_CC ++編程語言有什么區別?

    單片機c語言+編程c語言C & C++ are computer programming
    發表于 11-23 17:51 ?20次下載
    單片機<b class='flag-5'>c</b><b class='flag-5'>語言</b>+編程<b class='flag-5'>c</b><b class='flag-5'>語言</b>_<b class='flag-5'>C</b>和<b class='flag-5'>C</b> ++編程<b class='flag-5'>語言</b>有什么區別?

    單片機c語言+編程c語言_C編程語言簡介

    單片機c語言+編程c語言In this tutorial you will get basic introduction to C prog
    發表于 11-29 10:21 ?38次下載
    單片機<b class='flag-5'>c</b><b class='flag-5'>語言</b>+編程<b class='flag-5'>c</b><b class='flag-5'>語言</b>_<b class='flag-5'>C</b>編程<b class='flag-5'>語言</b>簡介

    C語言進階】C語言指針的高階用法

    C語言進階】C語言指針的高階用法
    的頭像 發表于 08-31 13:24 ?2722次閱讀
    主站蜘蛛池模板: 亚洲综合色一区 | 久久www免费人成看片色多多 | 黄色午夜剧场 | 手机看片国产福利 | 成人看片免费无限观看视频 | 免费观看一级特黄欧美大片 | 正在播放欧美 | 日本在线不卡一区二区 | 你懂的视频在线看 | 亚洲一卡二卡三卡 | 欧美日韩国产一区二区 | 五月天亚洲综合 | 在线女同免费观看网站 | 看黄网站在线观看 | 中文字幕va一区二区三区 | 亚洲精品香蕉婷婷在线观看 | 正在播放一区二区 | 57pao强力打造免费高清高速 | 日本丶国产丶欧美色综合 | 久久美女精品国产精品亚洲 | 日韩有码电影 | 天天躁狠狠躁夜夜躁2021 | 午夜伦理片免费观看在线 | www.a级片| 欧美无遮挡一区二区三区 | 夜夜爽夜夜爽 | 色婷婷六月天 | 欧美一级特黄aaaaaa在线看片 | 欧美色视频网站 | 能可以直接看的av网址 | 四虎影院永久地址 | 欧美一区二区三区在线观看免费 | 国产福利午夜 | 国产一级真人毛爱做毛片 | 国产老师的丝袜在线看 | 亚洲成a人片77777潘金莲 | 欧美成人观看免费全部完小说 | 国产特级毛片 | 亚洲综合国产一区二区三区 | 国产精品爱久久久久久久三级 | 国内一区二区三区精品视频 |