女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

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

errno、perror() 和 strerror()

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

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

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

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

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

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

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

被零除的錯(cuò)誤

在進(jìn)行除法運(yùn)算時(shí),如果不檢查除數(shù)是否為零,則會(huì)導(dǎo)致一個(gè)運(yùn)行時(shí)錯(cuò)誤。

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

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

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

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

程序退出狀態(tài)

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

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

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

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

quotient 變量的值為:4

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

    關(guān)注

    10

    文章

    1956

    瀏覽量

    36631
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4379

    瀏覽量

    64838

原文標(biāo)題:C語言中的錯(cuò)誤處理機(jī)制

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    關(guān)于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)絡(luò)通信系統(tǒng)(源代碼+報(bào)告文檔)

    ,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?

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

    優(yōu)秀的項(xiàng)目都使用最精簡的設(shè)計(jì)

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

    C語言基礎(chǔ)教材

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

    C語言簡單概述

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

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

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

    C51單片機(jī)C語言與標(biāo)準(zhǔn)C語言有什么區(qū)別?

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

    單片機(jī)C語言C語言為什么有差異?

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

    標(biāo)準(zhǔn)c語言與嵌入式,嵌入式C語言C語言的區(qū)別

    嵌入式C語言C語言的區(qū)別:最常用的系統(tǒng)編程語言C,它是在匯編
    發(fā)表于 10-20 14:06 ?6次下載
    標(biāo)準(zhǔn)<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>的區(qū)別

    C51語言

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

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

    單片機(jī)c語言+編程c語言C & C++ are computer programming
    發(fā)表于 11-23 17:51 ?20次下載
    單片機(jī)<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ū)別?

    單片機(jī)c語言+編程c語言_C編程語言簡介

    單片機(jī)c語言+編程c語言In this tutorial you will get basic introduction to C prog
    發(fā)表于 11-29 10:21 ?38次下載
    單片機(jī)<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語言進(jìn)階】C語言指針的高階用法

    C語言進(jìn)階】C語言指針的高階用法
    的頭像 發(fā)表于 08-31 13:24 ?2783次閱讀