C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19課件_第1頁(yè)
C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19課件_第2頁(yè)
C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19課件_第3頁(yè)
C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19課件_第4頁(yè)
C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19課件_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

幾個(gè)有關(guān)函數(shù)標(biāo)準(zhǔn)庫(kù)還提供了另外一些與IO有關(guān)的函數(shù)。1)緩沖區(qū)沖刷函數(shù)fflush。原型:

intfflush(FILE*stream)對(duì)輸出流有定義。要求立即將緩沖區(qū)數(shù)據(jù)寫入文件。本操作對(duì)輸入流的作用在標(biāo)準(zhǔn)里沒(méi)有定義。正常完成返回0,出錯(cuò)返回EOF。2)文件結(jié)束判斷函數(shù)feof。其原型是:

intfeof(FILE*stream)判斷是否到達(dá)文件末尾。主要用于二進(jìn)制文件,遇到文件結(jié)束時(shí)返回非0值。1C語(yǔ)言標(biāo)準(zhǔn)庫(kù)193)文件定位及定位函數(shù)文件可看作字節(jié)的序列,每個(gè)字節(jié)在序列中有一位置??烧J(rèn)為IO時(shí)有一個(gè)文件位置指示器。以讀/寫方式打開(kāi)時(shí)指示器設(shè)在文件開(kāi)頭,以附加方式打開(kāi)指示器設(shè)在文件尾。指示器隨讀寫操作自動(dòng)后移,指向下次操作位置。為方便,標(biāo)準(zhǔn)庫(kù)提供了直接操作文件指示器的函數(shù):文件定位函數(shù)/指示器移動(dòng)函數(shù)。最常用的三個(gè):voidrewind(FILE*st)將流st的文件指示器重設(shè)到文件開(kāi)始位置。longftell(FILE*st)返回流st當(dāng)時(shí)指示器位置。出錯(cuò)返回-1L。2C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19intfseek(FILE*st,longoffset, intorigin)設(shè)置流st的指示器,使隨后IO操作在新位置進(jìn)行。origin指定定位基準(zhǔn)點(diǎn),可能取值:SEEK_SET以文件頭作為定位的基準(zhǔn)點(diǎn)SEEK_CUR以指示器的當(dāng)前位置作為基準(zhǔn)點(diǎn)SEEK_END以文件尾作為基準(zhǔn)點(diǎn)正文流的移動(dòng)操作有限制。對(duì)二進(jìn)制流沒(méi)限制,移動(dòng)目標(biāo)是以origin為基準(zhǔn)點(diǎn)偏移offset的位置。3C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19出錯(cuò)處理輸出出錯(cuò)信息是希望顯示到屏幕供人讀。通過(guò)stdout不合適:輸出定向到文件也使出錯(cuò)信息送到文件。送到標(biāo)準(zhǔn)錯(cuò)誤流stderr的信息不受定向影響。改造前面程序cat,只需要改動(dòng)一個(gè)語(yǔ)句:fprintf(stderr,"%s,can'topeninfile:%s\n",name,*argv);

文件錯(cuò)誤檢查:intferror(FILE*stream)IO出錯(cuò)時(shí)設(shè)置相關(guān)流的出錯(cuò)標(biāo)志變量。ferror檢查流的出錯(cuò)標(biāo)志。當(dāng)stream的狀態(tài)變量設(shè)置時(shí)返回非0。錯(cuò)誤標(biāo)志復(fù)位(清除)函數(shù)

voidclearerr(FILE*stream)4C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19標(biāo)準(zhǔn)庫(kù)錯(cuò)誤處理:為檢查程序執(zhí)行中出錯(cuò),庫(kù)提供了一些機(jī)制。每個(gè)C系統(tǒng)定義了一組錯(cuò)誤編號(hào),0表示無(wú)錯(cuò),其余值表示各種錯(cuò)誤。一些函數(shù)出錯(cuò)時(shí)自動(dòng)給狀態(tài)變量errno設(shè)錯(cuò)誤編號(hào),還定義了相應(yīng)的信息串。見(jiàn)<errno.h>。打印當(dāng)時(shí)錯(cuò)誤信息:voidperror(char*s)檢查當(dāng)時(shí)錯(cuò)誤編號(hào)(perror調(diào)用之前的最近錯(cuò)誤),把對(duì)應(yīng)信息串送到stderr。輸出形式: 字符串s

冒號(hào)錯(cuò)誤信息串換行5C語(yǔ)言標(biāo)準(zhǔn)庫(kù)199.5標(biāo)準(zhǔn)庫(kù)介紹標(biāo)準(zhǔn)庫(kù)由一組庫(kù)代碼文件和一組頭文件組成。代碼文件內(nèi)是標(biāo)準(zhǔn)函數(shù)的程序代碼及相關(guān)數(shù)據(jù)(變量)。若程序調(diào)用標(biāo)準(zhǔn)函數(shù),連接程序?qū)膸?kù)代碼文件提取函數(shù)代碼,將其拼接到結(jié)果程序里,并完成調(diào)用連接。庫(kù)代碼文件里還附帶了一些連接程序使用的信息。ANSIC的標(biāo)準(zhǔn)頭文件是一組正文文件,提供庫(kù)函數(shù)的使用信息。其中列出庫(kù)函數(shù)原型,所用類型(如FILE)、符號(hào)常量(如EOF、NULL)和其他宏定義等。6C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19在C程序里用標(biāo)準(zhǔn)庫(kù)函數(shù),只需包含有關(guān)的頭文件,這將保證程序?qū)?biāo)準(zhǔn)庫(kù)函數(shù)的使用與其實(shí)際定義間的一致性。庫(kù)代碼文件通常很大,具體程序?qū)嶋H使用的庫(kù)功能通常只是其中很少一部分。人們開(kāi)發(fā)了這樣的技術(shù),在程序連接時(shí)不是把庫(kù)代碼文件整個(gè)裝配到可執(zhí)行文件里,而是根據(jù)實(shí)際需要,由庫(kù)文件里提取出必要部分裝配進(jìn)程序里,以保證用戶程序的緊湊性。7C語(yǔ)言標(biāo)準(zhǔn)庫(kù)199.5.1幾個(gè)已經(jīng)介紹過(guò)的頭文件<math.h><ctype.h>字符串函數(shù)(<string.h>):char*strchr(cs,c);char*strrchr(cs,c);查尋字符c在字符串cs里出現(xiàn)的位置(第一個(gè),或者最后一個(gè))。cs表示constchar*(const字符串),s表示char*(字符數(shù)組),用c表示字符。8C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19char*strpbrk(cs1,cs2);查尋cs2中的字符在cs1里第一次出現(xiàn)的位置。char*strstr(cs1,cs2);查尋cs2(子串)在cs1中出現(xiàn)的位置。成功時(shí)返回所確定位置的指針,失敗返回空指針。size_tstrspn(cs1,cs2);cs1的所有字符都屬于cs2的前綴的長(zhǎng)度;size_tstrcspn(cs1,cs2);cs1的所有字符都不屬于cs2的前綴的長(zhǎng)度?!扒熬Y”:字符串開(kāi)始的一段。9C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19char*strtok(s,ct);是個(gè)比較復(fù)雜的函數(shù)。其基本功能是用于在字符數(shù)組s中標(biāo)識(shí)出一段段字符,字符段之間原來(lái)由ct里的字符分隔(ct是分隔字符的數(shù)組)。另有一組存儲(chǔ)塊操作函數(shù):復(fù)制memcpy、移動(dòng)(允許重疊)memmove、比較memcmp、位置查找memchr、設(shè)置memset。10C語(yǔ)言標(biāo)準(zhǔn)庫(kù)199.5.2一些功能函數(shù),<stdlib.h>隨機(jī)數(shù)生成和動(dòng)態(tài)存儲(chǔ)分配函數(shù)已介紹。幾個(gè)整數(shù)函數(shù)intabs(intn) 求整數(shù)絕對(duì)值longlabs(longn) 求長(zhǎng)整數(shù)絕對(duì)值div_tdiv(intn,intm)

ldiv_tldiv(longn,longm)將n/m的商和余數(shù)存入結(jié)果結(jié)構(gòu)的對(duì)應(yīng)成員div_t和ldiv_t是預(yù)定義結(jié)構(gòu)類型,的成分是int或者long的的quot和rem。11C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19數(shù)值轉(zhuǎn)換從數(shù)字字符串構(gòu)造各種數(shù)值類型的值:doubleatof(constchar*s)

由串s構(gòu)造一個(gè)雙精度值intatoi(constchar*s)

由串s構(gòu)造一個(gè)整數(shù)值longatol(constchar*s)

由串s構(gòu)造一個(gè)長(zhǎng)整數(shù)值 12C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19執(zhí)行控制。幾個(gè)有關(guān)程序執(zhí)行結(jié)束的函數(shù):voidabort(void)程序立即非正常終止。voidexit(intstat)程序立即正常終止,stat為程序出口值,0表示成功結(jié)束。另可用常數(shù):EXIT_SUCCESS、EXIT_FAILURE。程序結(jié)束前關(guān)閉所有文件。可要求程序結(jié)束前做些動(dòng)作,通過(guò)函數(shù)atexit登記:intatexit(void(*fcn)(void))把函數(shù)fcn登記為結(jié)束動(dòng)作,可多次登記。fcn應(yīng)是無(wú)參無(wú)返回值的函數(shù)。atexit在登記正常返回值0,否則返回非零值。13C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19與執(zhí)行環(huán)境交互intsystem(constchar*s)把串s傳給程序環(huán)境,要求將它作為系統(tǒng)命令執(zhí)行。用NULL調(diào)用函數(shù)返回非0值表示環(huán)境里有命令解釋器(可以用這個(gè)方式檢查命令解釋器的存在)。s非NULL時(shí)返回值由實(shí)現(xiàn)確定。char*getenv(constchar*s)取回與串s相關(guān)的環(huán)境串。找不到時(shí)返回NULL。函數(shù)執(zhí)行結(jié)果由實(shí)現(xiàn)確定。在許多執(zhí)行環(huán)境里可以用這個(gè)函數(shù)查看環(huán)境變量的值。14C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19bsearch在一批數(shù)據(jù)里查找某個(gè)項(xiàng):void*bsearch(constvoid*key,constvoid*base,size_tn,size_tsize,int(*cmp)(constvoid*keyval,constvoid*datum))cmp應(yīng)與strcmp類似,在數(shù)keyval與datum相比更大/相等/更小時(shí)分別返回正/零/負(fù)值。設(shè)數(shù)組base[0]..base[n-1]元素按cmp序上升排列,元素大小為size。bsearch以*key為比較依據(jù)在數(shù)組里查找匹配元素(使cmp值等于0的元素),返回指向該元素的指針。找不到時(shí)返回NULL。15C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19qsort用于把一組數(shù)據(jù)按指定順序排列:voidqsort(void*bs,size_tn,size_tsize,int(*cmp)(constvoid*,constvoid*))cmp與bsearch的要求一樣。設(shè)bs[0],...,bs[n-1]元素大小為size,qsort把bs元素按照上升順序重排。16C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19函數(shù)bsearch和qsort使用的一個(gè)例子:int*p,k=7;inta[]={5,6,3,28,23,34,7,9,6,14};inticmp(constvoid*p,constvoid*q){int*m=(int*)p,*n=(int*)q;return*n>*m?1:(*n==*m?0:-1);}17C語(yǔ)言標(biāo)準(zhǔn)庫(kù)19intmain(){......qsort(a,NTERMS(a),sizeof(int),icmp);/*a的元素已按上升順序排列*/p=bsearch(&k,a,NTERMS(a),sizeof(int),icmp);/*指針p將指向數(shù)組a中元素7的位置*/...…return0;}18C語(yǔ)言標(biāo)準(zhǔn)庫(kù)199.5.3關(guān)于日期和時(shí)間的函數(shù),<time.h>定義了幾個(gè)時(shí)間類型,說(shuō)明了許多函數(shù)。time_t和clock_t是表示時(shí)間的數(shù)值類型:clock_t表示計(jì)時(shí)時(shí)間;time_t表示某種日歷時(shí)間,從歷史的某時(shí)刻開(kāi)始計(jì)算。定義了時(shí)間結(jié)構(gòu)structtm,成分:

inttm_sec;

剩余秒數(shù)(0~61)

inttm_min; 剩余分鐘數(shù)(0~59)

intt

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論