chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-11-12 15:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

errno、perror() 和 strerror()

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

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

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

讓我們來模擬一種錯誤情況,嘗試打開一個不存在的文件。您可以使用多種方式來輸出錯誤消息,在這里我們使用函數(shù)來演示用法。另外有一點需要注意,您應該使用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;}

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

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

被零除的錯誤

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

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

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

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

除數(shù)為0退出運行...

程序退出狀態(tài)

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

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

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

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

quotient 變量的值為:4

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

    關注

    10

    文章

    1965

    瀏覽量

    39608
  • 函數(shù)
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67568

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    飛凌嵌入式ElfBoard-文件I/O的了解探究之返回錯誤處理與相關函數(shù)

    errno僅返回數(shù)值,還需查閱錯誤宏定義才能知道具體錯誤原因,由此引入以下兩個標準c庫函數(shù)。perror用于在發(fā)生系統(tǒng)調用錯誤時輸出有關錯誤信息的描述。當一個系統(tǒng)調用或庫函數(shù)發(fā)生錯誤時,通常會
    發(fā)表于 11-21 08:50

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

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

    server在非阻塞下收不到client的數(shù)據(jù)

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

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

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

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

    你好!沒有檢查這個問題是否是特定的,也影響了C32的整體??傊涸赽erkeley_api.c文件中,包含兩個版本的errno.h。includeinclude嗯!兩者都定義了EPREM的不同值
    發(fā)表于 09-24 10:35

    優(yōu)秀的項目都使用最精簡的設計

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

    C語言基礎教材

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

    C語言簡單概述

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

    C語言入門經(jīng)典-C語言編程

    C語言入門經(jīng)典-C語言編程,感興趣的可以看看哦。
    發(fā)表于 08-16 18:54 ?132次下載

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

    一:C51(單片機C語言)與標準C語言的區(qū)別1、 C51語言
    發(fā)表于 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>有什么區(qū)別?

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

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

    C51語言

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

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

    單片機c語言+編程c語言C & C++ are computer programming
    發(fā)表于 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>有什么區(qū)別?

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

    單片機c語言+編程c語言In this tutorial you will get basic introduction to C prog
    發(fā)表于 11-29 10:21 ?39次下載
    單片機<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語言指針的高階用法
    的頭像 發(fā)表于 08-31 13:24 ?3478次閱讀