一篇文章帶你了解C語(yǔ)言文件操作中的幾個(gè)函數(shù)
fopen:有兩個(gè)參數(shù),第一個(gè)是要被打開(kāi)或者被創(chuàng)建的文件名,第二個(gè)是以什么方式打開(kāi)。這兩個(gè)參數(shù)要分別用雙引號(hào)括起來(lái)


打開(kāi)文件和關(guān)閉文件的基本流程,關(guān)閉文件之后要置空

fwrite:有四個(gè)參數(shù),第一個(gè)是指向要被寫(xiě)入的數(shù)據(jù)的指針,這里是a的地址;第二個(gè)參數(shù)是被寫(xiě)入項(xiàng)的大小,單位是字節(jié),這里是a的大?。坏谌齻€(gè)參數(shù)是要被寫(xiě)入的項(xiàng)的個(gè)數(shù),這里是1,意思是寫(xiě)入一個(gè)a;最后一項(xiàng)是FILE結(jié)構(gòu)的指針,這里是pf。這四個(gè)參數(shù)不需要雙引號(hào)。


文件指針:、
每個(gè)被使用的文件都在內(nèi)存中開(kāi)辟了一個(gè)相應(yīng)的文件信息區(qū),用來(lái)存放文件的相關(guān)信息(比如文件的名字、文件狀態(tài)以及文件當(dāng)前的位置等)。這些信息都是保存在一個(gè)結(jié)構(gòu)體變量中的,該結(jié)構(gòu)體類型是有系統(tǒng)聲明的,取名FILE。
不同的編譯器FILE類型包含的內(nèi)容并不完全相同,但是都大同小異。每當(dāng)打開(kāi)一個(gè)文件的時(shí)候,系統(tǒng)都會(huì)根據(jù)文件的情況自動(dòng)創(chuàng)建一個(gè)FILE結(jié)構(gòu)的變量,并填充其中的信息,使用者并不用關(guān)心細(xì)節(jié)。一般都是通過(guò)一個(gè)FILE結(jié)構(gòu)體的指針(pf)來(lái)維護(hù)這個(gè)FILE結(jié)構(gòu)的變量,這樣使用起來(lái)更加方便。

fgetc:只有一個(gè)參數(shù),是FILE結(jié)構(gòu)的指針,每次從該指針指向的數(shù)據(jù)中讀取一個(gè)字符

fputc:有兩個(gè)參數(shù),第一個(gè)是要被寫(xiě)入的字符,用單引號(hào)括起來(lái),第二個(gè)是FILE類型的指針,這里是pfWrite


fgets:用于讀取字符串,有三個(gè)參數(shù),第一個(gè)是讀取的數(shù)據(jù)要存放的位置(數(shù)組),第二個(gè)是可以讀取的最大字符數(shù),第三個(gè)是FILE結(jié)構(gòu)的指針,這里是標(biāo)準(zhǔn)輸入流(鍵盤)下圖中是從鍵盤輸入,再輸出到屏幕
fputs:用于輸出字符串,如果成功,函數(shù)會(huì)返回一個(gè)非負(fù)值,有兩個(gè)參數(shù),第一個(gè)是要被輸出字符串?dāng)?shù)組,第二個(gè)是FILE結(jié)構(gòu)的指針,這里是標(biāo)準(zhǔn)輸出流(屏幕)
gets:如果成功,函數(shù)會(huì)返回其參數(shù),只有一個(gè)參數(shù),即輸入字符串的存儲(chǔ)位置---buffer緩沖區(qū)
puts:如果成功,函數(shù)返回一個(gè)非負(fù)值,只有一個(gè)參數(shù),即輸出字符串所在的數(shù)組的地址
下圖這兩組函數(shù)的功能一樣,程序運(yùn)行后,在鍵盤上輸入什么字符或字符串,按下回車后,就會(huì)在屏幕上打印什么字符或字符串

fprintf:格式化的寫(xiě)(輸出)數(shù)據(jù)--這里是寫(xiě)進(jìn)去一個(gè)結(jié)構(gòu)體,直接打印出來(lái),該函數(shù)有三個(gè)參數(shù),第一個(gè)是指向FILE結(jié)構(gòu)體的指針(pf),意思是將數(shù)據(jù)寫(xiě)到pf所指向的結(jié)構(gòu)體當(dāng)中,第二個(gè)是格式,要輸出的數(shù)據(jù)的格式,要和后面的數(shù)據(jù)一一對(duì)應(yīng),第三個(gè)參數(shù)是要被輸出的數(shù)據(jù)(可以是結(jié)構(gòu)體,如下圖)

fscanf:格式化的輸入數(shù)據(jù),有三個(gè)參數(shù),第一個(gè)是指向FILE結(jié)構(gòu)體的指針(pf),第二個(gè)是 格式,第三個(gè)是要被寫(xiě)入的數(shù)據(jù)的地址,這里在注意是地址,經(jīng)常出錯(cuò),類比scanf,只比scanf多了第一個(gè)參數(shù)


sprintf:格式化的輸入,有三個(gè)參數(shù),第一個(gè)參數(shù)是要被寫(xiě)入內(nèi)容的數(shù)組地址,第二個(gè)是格式,第三個(gè)是要被寫(xiě)入的數(shù)據(jù)---主義的是,下圖中,sprintf函數(shù)是給字符數(shù)組char buf[]寫(xiě)入結(jié)構(gòu)體數(shù)據(jù),結(jié)構(gòu)體中有不同的格式,這里需要注意輸入信息的時(shí)候是按照%d%f%s對(duì)應(yīng)的格式輸入的,也就是結(jié)構(gòu)體成員對(duì)應(yīng)的格式,輸入到數(shù)組buf中后才將格式都轉(zhuǎn)換為字符,這里打印出來(lái)的100;3.140000也都是字符型

sscanf是格式化的讀取函數(shù),這里是將剛才上圖寫(xiě)入到數(shù)組buf中的數(shù)據(jù)讀取到結(jié)構(gòu)體變量tmp當(dāng)中,讀入時(shí)會(huì)按照結(jié)構(gòu)體成員對(duì)應(yīng)的格式將字符數(shù)組char buf中的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,再存儲(chǔ)到結(jié)構(gòu)體變量tmp中。
sscanf依然是三個(gè)參數(shù),第一個(gè)是被讀數(shù)組地址,第二個(gè)是被寫(xiě)入數(shù)據(jù)的結(jié)構(gòu)體成員的對(duì)應(yīng)格式,第三個(gè)是結(jié)構(gòu)體成員對(duì)應(yīng)的地址,這里要取地址,切記

下面的知識(shí)點(diǎn)面試可能會(huì)用到,務(wù)必搞懂
scanf和printf是針對(duì)標(biāo)準(zhǔn)輸入流(鍵盤)/標(biāo)準(zhǔn)輸出流(屏幕)的格式化輸入/輸出語(yǔ)句。
fscanf和fprintf是針對(duì)所有輸入流/標(biāo)準(zhǔn)輸出流的格式化輸入/輸出語(yǔ)句。
sscanf和sprintf是:ssacnf是從字符串中讀取格式化的數(shù)據(jù),sprintf是把格式化數(shù)據(jù)輸出成(存儲(chǔ)到)字符串中。

fseek:有三個(gè)參數(shù),第一個(gè)是指向FILE結(jié)構(gòu)體的指針pf,第二個(gè)是偏移量(可正可負(fù)),第三個(gè)是文件指針的當(dāng)前位置(SEEK_CUR文件指針的當(dāng)前位置\SEEK_END文件的末尾位置\SEEK_SET文件的起始位置)


perror報(bào)錯(cuò)函數(shù),不需要單獨(dú)引頭文件,不需要寫(xiě)參數(shù),perror(“hehe”);這個(gè)表達(dá)式會(huì)先打印hehe: 再報(bào)出錯(cuò)誤原因,它會(huì)自行判斷錯(cuò)誤原因并打印,用起來(lái)很方便
strerror也是報(bào)錯(cuò)函數(shù),使用:strerror(errno);,使用時(shí)需要引頭文件#include<string.h>

總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
淺析string類字符串和C風(fēng)格字符串之間的區(qū)別
string類是標(biāo)準(zhǔn)庫(kù)的類,并不是內(nèi)置類型,標(biāo)準(zhǔn)庫(kù)就像是我們自己定義的類差不多的,string類型對(duì)象沒(méi)有標(biāo)配'\0'結(jié)尾的2013-09-09
C語(yǔ)言代碼實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言代碼實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
C++實(shí)現(xiàn)高并發(fā)異步定時(shí)器
這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)高并發(fā)異步定時(shí)器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
數(shù)據(jù)結(jié)構(gòu)之AVL樹(shù)詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之AVL樹(shù)詳解,本文非常細(xì)致的講解了AVL樹(shù)的基礎(chǔ)知識(shí)、AVL樹(shù)的旋轉(zhuǎn)操作、AVL數(shù)的插入和刪除操作等,需要的朋友可以參考下2014-08-08
C++ Template 基礎(chǔ)篇(一):函數(shù)模板詳解
這篇文章主要介紹了C++ Template函數(shù)模板,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
c語(yǔ)言中回調(diào)函數(shù)的使用以及實(shí)際作用詳析
回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù),如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù),這篇文章主要給大家介紹了關(guān)于c語(yǔ)言中回調(diào)函數(shù)的使用以及實(shí)際作用的相關(guān)資料,需要的朋友可以參考下2021-07-07

