日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > C++ > 正文

C語言中的各種文件讀寫方法小結

2020-05-23 14:17:04
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C語言中的各種文件讀寫方法小結,是C語言入門學習中的基礎知識,需要的朋友可以參考下

前言

找工作的時候,曾經用C語言練習過一段時間的算法題目,也在幾個還算出名的OJ平臺有過還算靠譜的排名。之前以為C語言只限于練習一下算法,但是工作中的一個問題解決讓我意識到C語言的用處還是非常廣泛的。下面介紹一下,如果用C語言來操作文件保存一個字符串,和讀取一個字符串。算法中往往都是printf來打印出結果,但是真實工作中往往通過文件來進行一些持久化的存儲工作。

C-File I/O

文件的I/O操作是每一門語言的重點,因此這里我先來介紹一下如何用C語言去進行文件的I/O操作。

文件和流

就C語言程序而言,所有的I/O操作只是簡單地從程序移進或移出字節的事情。因此,這種字節流便被稱為流(stream)。程序只需要關心創建正確的輸出字節數據,以及正確地解釋從輸入讀取的字節數據。特定I/O設備的細節對程序員是隱藏的。絕大多數流是完全緩沖的(fully buffered),這意味著“讀取”和“寫入”實際上是從一塊被稱為緩沖區(buffer)的內存區域來回復制數據。從內存中來回復制數據是非常快速的。用于輸出流的緩沖區只有當它寫滿時才會被刷新(flush,物理寫入)到設備或文件中。一次性把寫滿的緩沖區寫入和逐片把程序產生的輸出分別寫入相比效率更高。輸入緩沖區也是類似的原理。

流分為兩種類型,分別是文本流和二進制流。

打開流和關閉流

fopen函數打開一個特定的文件,并把一個流和這個文件相關聯。它的原型如下所示:

[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

 

 
  1. FILE* open(const char* name, const char* mode);  

name參數是你希望打開的文件或設備的名字。mode參數標識流用于只讀、只寫還是既讀又寫,以及它是文本流還是二進制流。下面表格里列出了一些常用的模式:

C語言中的各種文件讀寫方法小結

如果fopen函數執行成功,它將返回一個指向FILE結構的指針,該結構代表這個新創建的流。如果函數執行失敗,它將返回一個NULL指針,error會提示問題的性質。

流是用函數fclose關閉的,它的原型如下:

[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

 

  1. int fclose(FILE *f);  

對于輸出流,fclose函數在文件關閉之前刷新緩沖區。如果它執行成功,fclose返回零值,否則返回EOF。

由于fopen和fclose打開和關閉的都是FILE結構體指針,而在stdio.h頭文件中,包含了對文件結構體FILE的描述。這里介紹一下FILE結構體定義:

 

 
  1. struct _iobuf {  
  2. char *_ptr; // 下一個要被讀取的字符的地址  
  3. int _cnr; // 剩余的字符  
  4. char *base; // 緩沖區基地址  
  5. int _flag; // 讀寫文件標志位  
  6. int _file; // 文件號  
  7. int _charbuf; // 檢查緩沖區的狀況  
  8. int _bufsiz; // 文件的大小  
  9. char *_tmpfname; // 臨時文件名  
  10. };  
  11. typedef struct _iobuf FILE;  

字符I/O

當一個流被打開之后,它可以用于輸入和輸出。它最簡單的形式是字符I/O。字符輸入是由getchar函數家族執行的,它們的原型如下所示:

 

 
  1. int fgetc(FILE *stream);  
  2. int getc(FILE *stream);  
  3. int getchar(void);  

需要操作的流作為參數傳遞給getc和fgetc,但是getchar始終是從標準輸入讀取。每個函數從流中讀取下一個字符,并把它作為函數的返回值返回。如果流中不存在更多的字符,函數就返回常量值EOF(-1)。

為了把單個字符寫入到流中,可以使用putchar函數家族。它的原型如下:

[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

 

 
  1. int fputc(int character, FILE* stream);  
  2. int putc(int character, FILE* stream);  
  3. int putchar(int character);  

行I/O

行I/O其實可以用兩種方式執行——未格式化的或者格式化的。這兩種形式都用于操縱字符串。區別在于未格式化的I/O只是通過fgets和fputs簡單讀取或寫入字符串,而格式化的I/O則執行數字和其他變量的內部或外部表示形式之間的轉換。由于日常工作中操作的一般都是格式化I/O,因此這里不講fgets和fputs這種非格式化I/O操作了。(當然,還有一個重要的原因,fgets無法判斷緩沖區長度,容易導致溢出等情況)

scanf家族

scanf函數家族的原型如下所示。每個原型中的省略號表示一個可變長度的指針列表。從輸入轉換而來的值逐個存儲到這些指針參數所指向的內存位置。

 

 
  1. int fscanf(FILE* stream, const char* format, ...);  
  2. int scanf(const char* format, ...);  
  3. int sscanf(const char* string, const char* format, ...);  

這些函數都從輸入源讀取字符并根據format字符串給出的格式化代碼對它們進行轉換。當格式化字符串到達末尾或者讀取的輸入不再匹配格式字符串所指定的類型時,輸入就停止。在任何一種情況下,被轉換的輸入值的數目作為函數的返回值返回。如果在任何輸入值被轉換之前文件就已經到達尾部,函數就返回常量值EOF。

printf家族

printf函數家族用于創建格式化的輸出。它們的函數原型如下:

 

 
  1. int fprintf(FILE *stream, const char* format, ...);  
  2. int printf(const char* format, ...);  
  3. int sprintf(char* buffer, const char* format, ...);  

二進制I/O

把數據寫到文件里效率最高的方法是用二進制形式寫入,而且Android系統里也有很有用二進制文件通過位來存儲數據的應用場景。介紹一下操縱二進制I/O的函數原型。

fread函數用于讀取二進制數據,fwrite函數用于寫入二進制數據。它們的原型如下所示:

[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片

 

 
  1. size_t fread(void* buffer, size_t size, size_t count, FILE* stream);  
  2. size_t fwrite(void* buffer, size_t size, size_t count, FILE* stream);  

buffer是一個指向用于保存數據的內存位置的指針,size是緩沖區中每個元素的字節數,count是讀取或寫入的元素數,stream是數據讀取或寫入的流。

刷新和定位函數

在處理流時,另外還有一些函數也較為有用。首先,是fflush,它迫使一個輸出流的緩沖區內的數據進行物理寫入,不管它是不是已經寫滿。它的原型如下所示:

 

 
  1. int fflush(FILE* stream);  

當我們需要立即把輸出緩沖區的數據進行物理寫入時,應該使用這個函數。

在正常的情況下,數據以線性的方式寫入,這意味著后面寫入的數據在文件中的位置是在以前所有寫入數據的后面。C同時支持隨機訪問I/O,也就是以任意順序訪問文件的不同位置。隨機訪問是通過在讀取或寫入前先定位到文件中需要的位置來實現的。一般使用fseek函數來實現,函數原型如下:

 

 
  1. int fseek(FILE* stream, long offset, int from);  

fseek函數允許你在一個流中定位。這個操作將改變下一個讀取或寫入的位置。它的第一個參數是需要改變的流,它的第二個和第三個參數標識文件中需要定位的位置。下表描述了fseek參數的使用方法。

C語言中的各種文件讀寫方法小結

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
91亚洲欧美| 91精品久久久久久久久| 92久久精品| 欧美日韩视频网站| 欧美日韩中文国产| 国产最新在线| 91精品国产日韩91久久久久久| 欧美日韩高清在线一区| 精品欧美日韩| 中文字幕日韩高清| 中文字幕第一页在线播放| 欧美日韩综合高清一区二区| 成人h视频在线观看| av一级在线| 日韩在线视频中文字幕| 国产欧美日韩第一页| 激情久久99| 午夜黄色小视频| 日韩视频精品在线观看| 在线精品日韩| 久久久精品国产99久久精品芒果| 中文字幕2020第一页| 日韩在线视频观看| 在线综合 亚洲 欧美中文字幕| av免费在线播放| 午夜福利一区二区三区| 日韩欧美一级在线| 一区二区精品| 欧美三级免费观看| 中文字幕第一页在线播放| 日韩手机在线观看视频| a在线观看免费视频| 久久久精品日韩| 国产在线日韩欧美| 蜜桃精品在线| 欧美日韩国产影片| av高清一区| 久久久99久久| 亚洲图片小说综合| 日韩va亚洲va欧洲va国产| 91精品久久久久久久久久入口| 国产欧美日韩最新| 日韩久久在线| 欧美亚洲专区| 国产www在线观看| 91国内在线| 日韩中文字幕久久| 久久99精品久久久久婷婷| 国产免费一级| 欧美日韩亚洲国内综合网俺| 欧美日韩精品免费看| 婷婷久久综合九色国产成人| 亚洲欧美视频一区二区三区| 日韩在线 中文字幕| 中文网丁香综合网| 91精品国产91久久久久久三级| 91精品国产免费| xxxxx性| 日韩一级免费在线观看| 欧美高清一区| 亚洲福利精品视频| 国产在线黄色片| 97caopor国产在线视频| 国产一级免费| 欧美亚洲视频在线看网址| 91 中文字幕| 国产欧美中文在线| 亚洲二区自拍| 一二三区精品福利视频| 91麻豆精品国产91久久久使用方法| 红桃视频亚洲| 亚洲 欧美综合在线网络| 日韩欧美综合在线| 国产999在线观看| 日韩中文字幕精品视频| 中文字幕亚洲在| 日韩在线视频网| 亚洲欧洲国产视频| 国产69精品久久久久孕妇国产69久久| 91精品国产自产在线丝袜啪| 日韩三级一区| 国产成人精品999在线观看| 国产在线www| 中文字幕第一页在线播放| 久久精品夜夜夜夜久久| 二区中文字幕| 麻豆精品99| 欧美日韩精品高清| 一区二区不卡在线播放| 久草视频观看| 亚洲视频中文字幕| 中文字幕在线观看亚洲| 欧美日韩免费不卡视频一区二区三区| 精品对白一区国产伦| 欧美日韩夫妻久久| 精品欧美日韩| 日韩精品国产欧美| 精品欧美久久久| 日韩av二区| 日韩欧美99| 欧美日韩第一区日日骚| 欧美日韩精品中文字幕| 日韩精品午夜| 亚洲视频日韩| 国产欧美日韩在线观看| 交视频在线观看国产| 国内精品不卡| 快she精品国产999| 日韩欧美国产1| 欧美一级二级三级区| 欧美性生交大片免费| 欧洲精品二区| 午夜成人鲁丝片午夜精品| 中文字幕精品在线视频| 亚洲乱码中文字幕综合| 国产成人一二三区| 在线一区av| 国产精久久久久| 欧美日韩综合视频网址| 欧美亚洲另类制服自拍| 在线观看91精品国产入口| 欧美日韩精品三区| 日韩国产成人| 国产欧美日韩在线| 国产不卡在线| 日韩三级视频在线看| 日韩欧美在线视频| 在线视频第一页| 久艹在线视频| 91精品国产免费| 欧美日韩在线国产| 久久av免费| 欧美日韩亚洲91| 欧美日韩在线精品成人综合网| 在线观看91精品国产入口| 国产一区精品| 国产日韩成人精品| 91精品国产综合久久久蜜臀粉嫩| 影音先锋一区二区资源站| 日本视频久久久| 国产激情久久| 亚洲国产91精品在线观看| 精品午夜av| 欧美国产中文| 亚洲伊人婷婷| 亚洲一级二级| 91精品国产色综合久久不卡蜜臀| 中文在线а√在线8| 91久久精品网| 欧美日韩综合视频| 欧美一级日韩一级| 国产黄色小视频| 天天综合天天综合| 日韩.欧美.亚洲| 中文不卡在线| 亚洲男女av一区二区| 中文字幕精品国产| 在线视频国内一区二区| 国产一级网站视频在线| 色综合天天综合网国产成人综合天| 精品久久久久久综合日本欧美| 日韩不卡一二区| 欧美日韩亚州综合| 精品久久人人做人人爽| lutube成人福利在线观看| 欧美日韩精品在线播放| 在线精品视频免费播放| 在线观看免费国产小视频| 国产高清在线一区| 亚洲经典中文字幕| 日韩色在线观看| 97最新国自产拍视频在线完整在线看| 中文字幕亚洲二区| 欧美国产小视频| 日韩精品第一区| 在线一区免费| 色www精品视频在线观看| 国产在线高清精品| 国产三级视频在线播放线观看| 久久精品国产成人一区二区三区| 国产欧美日韩中文| 在线不卡日本| 国产在线精品国自产拍免费| 亚洲成a人片在线www| 国产欧美一级| 日韩国产一区三区| 欧美日韩亚洲国内综合网| 日韩欧美一级视频| 91精品在线免费| 精品视频在线视频| 天天在线视频色| 国产欧美久久久| 国产一级片播放| 91精品国产综合久久久久久| 精品国产乱码久久久久久牛牛| 欧美高清一区| 黄色国产在线| 中文亚洲免费| 欧美日韩在线看| 欧美日韩激情一区二区三区| 国产成人精品日本亚洲专区61| 亚洲高清在线观看一区| 91精选在线| 日韩亚洲不卡在线| 亚洲国产欧美91| 久久久99精品久久| 免费在线国产| 91xxx在线观看| 欧美国产91| 国产成人精品免费网站| 99视频在线看| 亚洲免费精品| 欧美日韩中文国产| 午夜国产视频| 欧美日韩精品久久久| 日韩国产成人| 国产一区精品| 一区二区不卡久久精品| 免费在线视频一区二区| 亚洲 欧美 中文字幕| 91 中文字幕| 国产黄色在线网站| 欧美不卡视频一区| 不卡中文一二三区| 国产在线不卡一区| www在线播放| 999精品在线| 久久麻豆视频| 久久中文免费视频| 中文字幕在线观看亚洲| 欧美日韩综合在线| 日韩国产专区| 亚洲精品欧美二区三区中文字幕| 精品一二线国产| 日韩欧美国产成人一区二区| 51精品免费网站| 中文字幕精品视频| 日韩精品丝袜在线| 亚洲黄色片在线观看| 免费在线视频一区二区| 日韩欧美在线1卡| 欧美日韩国产综合久久| 日韩欧美国产三级| 日韩精品在线免费观看视频| 91精品国产91久久久久久不卡| 中文字幕高清在线播放| eeuss一区| 亚洲视频 中文字幕| 国产午夜精品视频免费不卡69堂| 中文字幕久精品免费视频| 91精品免费观看| 欧美一级搡bbbb搡bbbb| 国产视频一二区| 日韩美女视频一区二区在线观看| 中文字幕在线视频日韩| 日韩中文字幕在线观看视频| 在线看av的网址| 日韩三级视频在线播放| 国产三级视频网站| 欧美一级久久久久久久久大| www日韩在线观看| 亚洲永久免费视频| 亚洲开心激情| 欧美日韩国产在线播放| 久久电影国产免费久久电影| 国产一卡2卡3卡4卡网站免费| 日韩欧美一级视频| 国产日产一区二区| 一区二区日韩av| 最近中文字幕在线中文高清版| 欧美 日韩 国产 高清| 日韩a一区二区| 亚洲欧美99| 自拍日韩亚洲一区在线| 日韩精品在线观看网站| 91精品国产自产在线观看永久∴ | 日韩视频不卡中文| 欧美日韩久久不卡| 亚洲综合在线小说| 亚洲视频日韩| 精品欧美久久久| 日韩中文字幕在线视频观看| 亚洲三级国产| 最新中文字幕在线播放 | 91精品国产自产观看在线| 999精品网| 在线国产91| 国产小视频免费在线观看| 亚洲小说春色综合另类电影| 亚洲一级二级| 九一精品国产| 国产一级视频在线播放| 亚洲成av人片在线| 精品视频www| 国产欧美日产一区| 中文字幕在线精品| 在线观看区一区二| 在线一区二区三区精品| 国产一区二中文字幕在线看| 欧美日韩一二三| 日韩欧美色综合网站| 欧美久久久精品| 在线观看免费国产成人软件| 久久欧美中文字幕| 国产视频2区| 色综合影院在线| 高清不卡一区二区| 欧美日韩尤物久久| 亚洲视频日韩| 中文字幕 亚洲一区| 久久精品日韩无码| 日韩在线中文视频| www.日韩免费| 亚洲一级在线| 日韩精品福利一区二区三区| 久久久精品日韩| 国产激情在线视频| 日韩精品视频中文字幕| 日韩亚洲欧美中文三级| 亚洲一区中文字幕在线| 国产伦精品免费视频| 精品国内自产拍在线视频| 亚洲欧美日本另类| 免费网站看黄yyy222| 国产aa精品| 在线视频国内一区二区| 国产在线日韩欧美| 日韩不卡一二三区| 久久精品国产2020观看福利| av免费观看网站| 91精品婷婷国产综合久久竹菊 | 国产一区在线观看视频| 国产区日韩欧美| 亚洲综合视频一区| 国内精品99| 精品播放一区二区| 日韩国产成人精品| 欧美日韩亚洲不卡| 久久精品在线观看| 国产99精品| 日韩精品在线看| 亚洲.国产.中文慕字在线| 日韩国产欧美三级| 国产视频2区| 国产日韩精品电影| 日韩一级二级三级| 一区二区在线看| av丝袜在线| 亚洲国产午夜精品| 99日韩精品| 午夜国产福利一区二区| 国产对白在线| 久久精品国产2020观看福利| 最新中文在线视频| 日韩精品手机在线观看| 欧美中文字幕在线| 亚洲乱码中文字幕| 综合图区亚洲白拍在线| 一区二区国产在线| 国产v日产∨综合v精品视频| 国产一二三区精品视频| 麻豆精品视频入口| 国产午夜精品一区二区三区视频| 午夜一区二区三区| 欧美在线日韩在线| 精品国产乱码一区二区| 在线国产三级| 久久夜色精品国产噜噜亚洲av| 日韩精品资源二区在线| 一区二区三区久久| 国产www在线观看| 一区二区中文字幕在线| 日韩欧美高清在线视频| 亚洲一区在线观看免费| 粉嫩喷白浆久久| 精品综合久久久久| 在线看欧美日韩| 中文字幕日韩在线视频| 亚洲狠狠婷婷综合久久久久图片| 一区二区三区中文字幕在线观看| 在线免费视频一区二区| 中文字幕久久精品| 亚洲第一视频| 国产一级片播放| 交视频在线观看国产| 久久精品欧美日韩精品| 日韩欧美一二三四区| 日韩在线高清视频| 91久久精品在线| 日韩www在线| 亚洲欧美99| 色综合婷婷久久| 国产视频2区| av免费网站在线观看| 欧美在线视频二区| 欧美日韩在线中文字幕| 精品国产99久久久久久| 色综合天天性综合| 国产91大片| 欧美日韩国产第一页|