欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言 以字符串的形式讀寫文件詳解及示例代碼

 更新時(shí)間:2016年08月25日 08:45:50   投稿:lqh  
本文主要介紹 C語(yǔ)言以字符串的形式讀寫文件,這里提供了詳細(xì)的資料及簡(jiǎn)單示例代碼以便大家學(xué)習(xí)參考,有學(xué)習(xí)此部分的小伙伴可以參考下

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。

注意,讀取到的字符串會(huì)在末尾自動(dòng)添加 '\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語(yǔ)言中,沒有按行讀取文件的函數(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語(yǔ)言中文網(wǎng)
http://c.biancheng.net
一個(gè)學(xué)習(xí)編程的好網(wǎng)站!

那么運(yùn)行結(jié)果為:

fgets() 遇到換行時(shí),會(huì)將換行符一并讀取到當(dāng)前字符串。該示例的輸出結(jié)果之所以和 demo.txt 保持一致,該換行的地方換行,就是因?yàn)?fgets() 能夠讀取到換行符。而 gets() 不一樣,它會(huì)忽略換行符。

寫字符串函數(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語(yǔ)言中文網(wǎng)
http://c.biancheng.net
一個(gè)學(xué)習(xí)編程的好網(wǎng)站!
C C++ Java Linux Shell

以上就是 C語(yǔ)言字符串的形式讀取文件,后續(xù)繼續(xù)整理相關(guān)資料,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C++ auto類型說明符

    C++ auto類型說明符

    在C++11中引入了auto類型說明符,用它就能讓編譯器替我們?nèi)シ治霰磉_(dá)式所屬的類型。當(dāng)然,auto變量必須有初始值,這樣編譯器才能推斷其類型
    2016-03-03
  • C++ 類的友元機(jī)制解讀

    C++ 類的友元機(jī)制解讀

    這篇文章主要介紹了C++ 類的友元機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C++實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

    C++實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語(yǔ)言實(shí)現(xiàn)酒店管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語(yǔ)言中條件編譯詳解

    C語(yǔ)言中條件編譯詳解

    預(yù)處理程序提供了條件編譯的功能??梢园床煌臈l件去編譯不同的程序部分,因而產(chǎn)生不同的目標(biāo)代碼文件。這對(duì)于程序的移植和調(diào)試是很有用的。條件編譯有三種形式,下面分別介紹。
    2017-05-05
  • QT實(shí)戰(zhàn)之打開最近圖片功能的實(shí)現(xiàn)

    QT實(shí)戰(zhàn)之打開最近圖片功能的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt和QSettings實(shí)現(xiàn)打開最近圖片功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)QT有一定的幫助,感興趣的可以了解一下
    2022-06-06
  • 詳解C語(yǔ)言數(shù)組靈活多變的訪問形式

    詳解C語(yǔ)言數(shù)組靈活多變的訪問形式

    這篇文章主要介紹了詳解C語(yǔ)言數(shù)組靈活多變的訪問形式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語(yǔ)言中的for循環(huán)語(yǔ)句基本語(yǔ)法及使用

    C語(yǔ)言中的for循環(huán)語(yǔ)句基本語(yǔ)法及使用

    這篇文章主要介紹了C語(yǔ)言中的for循環(huán)語(yǔ)句基本語(yǔ)法及使用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Qt繪制圖表的實(shí)現(xiàn)

    Qt繪制圖表的實(shí)現(xiàn)

    Qt中提供了強(qiáng)大的2D繪圖系統(tǒng),可以使用同一API實(shí)現(xiàn)在屏幕和繪圖設(shè)備上進(jìn)行繪制,本文就詳細(xì)的介紹了Qt繪制坐標(biāo)圖、柱狀圖、折線圖、餅圖、曲線圖、散點(diǎn)圖等,感興趣的可以了解一下
    2021-05-05
  • C++類成員函數(shù)中的名字查找問題

    C++類成員函數(shù)中的名字查找問題

    這篇文章主要介紹了C++類成員函數(shù)中的名字查找問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論