關于C語言fprintf與fwrite的使用區(qū)別

姓名:呂彬 學號:16130140354

【嵌牛導讀】最近在做數據結構大作業(yè)的過程中遇到了一些問題哮奇,需要將鏈表中的數據寫入文件中(txt),但是用記事本將文件打開后總是亂碼。

【嵌牛鼻子】C語言文件應用

【嵌牛提問】fwrite與fprintf的使用區(qū)別是說什么?

【嵌牛正文】C語言把文件看作一個字符(字節(jié))的序列,即由一個一個字符(字節(jié))的數據順序組成抽活。根據數據的組織形式,可分為ASCII文件和二進制文件锰什。ASCII文件又稱為文本(text)文件下硕,它的每個字節(jié)放一個ASCII代碼,代表一個字符汁胆。二進制文件是把內存中的數據按其在內在中的存儲形式原樣輸出到磁盤上存放梭姓。fprintf(fp, "%d", buffer); 是將格式化的數據寫入文件fprintf(文件指針,格式字符串,輸出表列);fwrite(&buffer, sizeof(int), 1, fp);是以二進位方式寫入文件fwrite(數據,數據類型大心勐搿(字節(jié)數)誉尖,寫入數據的最大數量,文件指針);由于fprintf寫入時铸题,對于整數來說铡恕,一位占一個字節(jié),比如1丢间,占1個字節(jié)探熔;10,占2個字節(jié)烘挫;100诀艰,占3個字節(jié),10000饮六,占5個字節(jié)所以文件的大小會隨數據的大小而改變其垄,對大數據空間占用很大。而fwrite是按二進制寫入喜滨,所以寫入數據所占空間是根據數據類型來確定捉捅,比如int的大小為4個字節(jié)(一般32位下)撤防,那么整數10所占空間為4個字節(jié)虽风,100棒口、10000所占空間也是4個字節(jié)。所以二進制寫入比格式化寫入更省空間辜膝。因此无牵,對于1 2 3 4 5 6 7 8 9 0 十個整數,用fprintf寫入時厂抖,占10個字節(jié)茎毁;而用fwrite寫入時,占40個字節(jié)忱辅。對于100 101 102 103 104 105 106 107 108 109 110 這十個整數七蜘,用fprintf寫入時,占30個字節(jié)墙懂;而用fwrite寫入時橡卤,占40個字節(jié)。對于10000 10100 10200 10300 10400 10500 10600 10700 10800 10900 11000 這十個整數损搬,用fprintf寫入時碧库,占50個字節(jié);而用fwrite寫入時巧勤,還是占40個字節(jié)嵌灰。fwrite 函數按照指定的數據類型將矩陣中的元素寫入到文件中。寫二進制文件其調用格式為:COUNT=fwrite (fid, A, precision)其中COUNT返回所寫的數據元素個數颅悉,fid為文件句柄沽瞭,A用來存放寫入文件的數據,precision用于控制所寫數據的類型签舞,其形式與fread函數相同秕脓。fprintf寫文本文件 函數的調用格式為:COUNT= fprintf(fid, format, A)其中A存放要寫入文件的數據。先按format指定的格式將數據矩陣A格式化儒搭,然后寫入到fid所指定的文件吠架。format用以控制讀取的數據格式,由%加上格式符組成搂鲫,常見的格式符有d傍药,f,c魂仍,s拐辽。fid為文件句柄〔磷茫看如下的例子:

圖片發(fā)自簡書App

輸入:100000 liuj使用記事本打開兩個文本文件t.txt和tt.txt俱诸,結果如下:t.txt: 100000 liuj(文件大小:11字節(jié))tt.txt:爢 liuj (亂碼赊舶,文件大姓龃睢:9字節(jié))當我們按照文本方式往文件中寫入數據時赶诊,一旦遇到換行字符(ASCII為10),則會轉換為回車-換行(ASCII為13园骆、10)舔痪。在讀取文件時,一旦遇到回車-換行的組合(即連續(xù)的ASCII 13锌唾、10)锄码,則會轉換為換行字符(ASCII為10)。當我們按照二進制方式往文件中寫入數據晌涕,則將數據在內存中的存儲形式原樣輸出到文件中滋捶。fwrite是將數據不經轉換直接以二進制的形式寫入文件,而fprintf是將數據轉換為字符后再寫入文件余黎。這樣就導致:當使用fwrite將一個int型數字65寫入文本文件時炬太,由于65對應的二進制數是1000001,十六進制數是0x41驯耻,存儲的是以二進制的形式1000001.在notepad++中使用十六進制方式打開顯示的是:0x0041亲族,轉換為十進制則為65,使用記事本打開這個文本文件后顯示的是A可缚,因為記事本程序默認為存儲在文本文件中的數據都是ASCII碼形式存儲霎迫,它把65當做ASCII碼翻譯為字符A。當使用fpintf將一個int型數字65寫入文本文件時帘靡,將65每一位轉換為ASCII碼存儲知给,6、5分別對應ASCII碼54描姚、53涩赢,存儲的是ASCII碼54、53.在notepad++中使用十六進制方式打開顯示的是:3635轩勘,轉換為十進制則為54筒扒、53,這正是數字6绊寻、5的ASCII碼花墩。使用記事本打開這個文本文件時,記事本將存儲在其中的54澄步、53當做ASCII碼翻譯為字符6冰蘑、5顯示,我們看到的是便是字符65村缸。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末祠肥,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子梯皿,更是在濱河造成了極大的恐慌仇箱,老刑警劉巖聋丝,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異工碾,居然都是意外死亡,警方通過查閱死者的電腦和手機百姓,發(fā)現死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門渊额,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人垒拢,你說我怎么就攤上這事旬迹。” “怎么了求类?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵奔垦,是天一觀的道長。 經常有香客問我尸疆,道長椿猎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任寿弱,我火速辦了婚禮犯眠,結果婚禮上,老公的妹妹穿的比我還像新娘症革。我一直安慰自己筐咧,他們只是感情好,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布噪矛。 她就那樣靜靜地躺著量蕊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艇挨。 梳的紋絲不亂的頭發(fā)上残炮,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天,我揣著相機與錄音缩滨,去河邊找鬼吉殃。 笑死,一個胖子當著我的面吹牛楷怒,可吹牛的內容都是我干的蛋勺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼鸠删,長吁一口氣:“原來是場噩夢啊……” “哼抱完!你這毒婦竟也來了?” 一聲冷哼從身側響起刃泡,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巧娱,失蹤者是張志新(化名)和其女友劉穎碉怔,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體禁添,經...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡撮胧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了老翘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芹啥。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铺峭,靈堂內的尸體忽然破棺而出墓怀,到底是詐尸還是另有隱情,我是刑警寧澤卫键,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布傀履,位于F島的核電站,受9級特大地震影響莉炉,放射性物質發(fā)生泄漏钓账。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一絮宁、第九天 我趴在偏房一處隱蔽的房頂上張望官扣。 院中可真熱鬧,春花似錦羞福、人聲如沸惕蹄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卖陵。三九已至,卻和暖如春张峰,著一層夾襖步出監(jiān)牢的瞬間泪蔫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工喘批, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撩荣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓饶深,卻偏偏與公主長得像餐曹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子敌厘,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內容

  • 廣義上的二進制文件包括文本文件台猴,這里討論的是狹義上的二進制文件與文本文件的比較: 1. 能存儲的數據類型不同 文本...
    時待吾閱讀 11,767評論 2 28
  • C/C++輸入輸出流總結 前兩天寫C++實習作業(yè),突然發(fā)現I/O是那么的陌生,打了好長時間的文件都沒有打開饱狂,今天終...
    LuckTime閱讀 1,736評論 0 6
  • 所謂“文件”是指一組相關數據的有序集合曹步,該數據的集合的名字就是文件名。文件可以分為很多類休讳,如源程序文件讲婚、目標文件、...
    一葉之界閱讀 478評論 0 0
  • 開學了路上掉溝里了,老師問他有沒受傷芜辕?孩子說::人沒事尚骄,就是暑假作業(yè)全掉溝里了!G中倔丈!老師笑了,你的套路比溝深啊.....
    de7c69bfb64b閱讀 120評論 0 0
  • 前兩天,五岳散人在微博上發(fā)表的一段長文轧坎,一石激起千層浪宏邮,網上立馬炸開了鍋。用他自己的話說缸血,就是捅了個大大的馬蜂窩蜜氨。...
    艾拉的時光機閱讀 1,080評論 11 6