C語言 以字符串的形式讀寫文件詳解及示例代碼
fgetc() 和 fputc() 函數(shù)每次只能讀寫一個(gè)字符,速度較慢;實(shí)際開發(fā)中往往是每次讀寫一個(gè)字符串或者一個(gè)數(shù)據(jù)塊,這樣能明顯提高效率。
讀字符串函數(shù)fgets
fgets() 函數(shù)用來從指定的文件中讀取一個(gè)字符串,并保存到字符數(shù)組中,它的原型為:
char *fgets ( char *str, int n, FILE *fp );
str 為字符數(shù)組,n 為要讀取的字符數(shù)目,fp 為文件指針。
返回值:讀取成功時(shí)返回字符數(shù)組首地址,也即 str;讀取失敗時(shí)返回 NULL;如果開始讀取時(shí)文件內(nèi)部指針已經(jīng)指向了文件末尾,那么將讀取不到任何字符,也返回 NULL。
注意,讀取到的字符串會在末尾自動添加 '\0',n 個(gè)字符也包括 '\0'。也就是說,實(shí)際只讀取到了 n-1 個(gè)字符,如果希望讀取 100 個(gè)字符,n 的值應(yīng)該為 101。例如:
#define N 101 char str[N]; FILE *fp = fopen("D:\\demo.txt", "r"); fgets(str, N, fp);
表示從 D:\\demo.txt 中讀取100個(gè)字符,并保存到字符數(shù)組str中。
需要重點(diǎn)說明的是,在讀取到 n-1 個(gè)字符之前如果出現(xiàn)了換行,或者讀到了文件末尾,則讀取結(jié)束。這就意味著,不管n的值多大,fgets() 最多只能讀取一行數(shù)據(jù),不能跨行。在C語言中,沒有按行讀取文件的函數(shù),我們可以借助 fgets(),將n的值設(shè)置地足夠大,每次就可以讀取到一行數(shù)據(jù)。
【示例】一行一行地讀取文件。
#include <stdio.h> #include <stdlib.h> #define N 100 int main(){ FILE *fp; char str[N+1]; if( (fp=fopen("d:\\demo.txt","rt")) == NULL ){ printf("Cannot open file, press any key to exit!\n"); getch(); exit(1); } while(fgets(str, N, fp) != NULL){ printf("%s", str); } fclose(fp); system("pause"); return 0; }
將下面的內(nèi)容復(fù)制到 D:\\demo.txt:
C語言中文網(wǎng)
http://c.biancheng.net
一個(gè)學(xué)習(xí)編程的好網(wǎng)站!
那么運(yùn)行結(jié)果為:
fgets() 遇到換行時(shí),會將換行符一并讀取到當(dāng)前字符串。該示例的輸出結(jié)果之所以和 demo.txt 保持一致,該換行的地方換行,就是因?yàn)?fgets() 能夠讀取到換行符。而 gets() 不一樣,它會忽略換行符。
寫字符串函數(shù)fputs
fputs() 函數(shù)用來向指定的文件寫入一個(gè)字符串,它的原型為:
int fputs( char *str, FILE *fp );
str 為要寫入的字符串,fp 為文件指針。寫入成功返回非負(fù)數(shù),失敗返回EOF。例如:
char *str = "http://c.biancheng.net";
FILE *fp = fopen("D:\\demo.txt", "at+");
fputs(str, fp);
表示把把字符串 str 寫入到 D:\\demo.txt 文件中。
【示例】向上例中建立的 d:\\demo.txt 文件中追加一個(gè)字符串。
#include<stdio.h> int main(){ FILE *fp; char str[102] = {0}, strTemp[100]; if( (fp=fopen("D:\\demo.txt", "at+")) == NULL ){ printf("Cannot open file, press any key to exit!\n"); getch(); exit(1); } printf("Input a string:"); gets(strTemp); strcat(str, "\n"); strcat(str, strTemp); fputs(str, fp); fclose(fp); return 0; }
運(yùn)行程序,輸入C C++ Java Linux Shell,打開 D:\\demo.txt,文件內(nèi)容為:
C語言中文網(wǎng)
http://c.biancheng.net
一個(gè)學(xué)習(xí)編程的好網(wǎng)站!
C C++ Java Linux Shell
以上就是 C語言字符串的形式讀取文件,后續(xù)繼續(xù)整理相關(guān)資料,謝謝大家對本站的支持!
上一篇:C語言 格式化讀寫文件詳解
欄 目:C語言
本文標(biāo)題:C語言 以字符串的形式讀寫文件詳解及示例代碼
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2076.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁面的局部加載