程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> C語言以字符串的形式讀寫文件

C語言以字符串的形式讀寫文件

編輯:C語言基礎知識
fgetc() 和 fputc() 函數每次只能讀寫一個字符,速度較慢;實際開發中往往是每次讀寫一個字符串或者一個數據塊,這樣能明顯提高效率。

讀字符串函數fgets

fgets() 函數用來從指定的文件中讀取一個字符串,並保存到字符數組中,它的原型為:
char *fgets ( char *str, int n, FILE *fp );
str 為字符數組,n 為要讀取的字符數目,fp 為文件指針。

返回值:讀取成功時返回字符數組首地址,也即 str;讀取失敗時返回 NULL;如果開始讀取時文件內部指針已經指向了文件末尾,那麼將讀取不到任何字符,也返回 NULL。

注意,讀取到的字符串會在末尾自動添加 '\0',n 個字符也包括 '\0'。也就是說,實際只讀取到了 n-1 個字符,如果希望讀取 100 個字符,n 的值應該為 101。例如:
#define N 101
char str[N];
FILE *fp = fopen("D:\\demo.txt", "r");
fgets(str, N, fp);
表示從 D:\\demo.txt 中讀取100個字符,並保存到字符數組str中。

需要重點說明的是,在讀取到 n-1 個字符之前如果出現了換行,或者讀到了文件末尾,則讀取結束。這就意味著,不管n的值多大,fgets() 最多只能讀取一行數據,不能跨行。在C語言中,沒有按行讀取文件的函數,我們可以借助 fgets(),將n的值設置地足夠大,每次就可以讀取到一行數據。

【示例】一行一行地讀取文件。
#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;
}
將下面的內容復制到 D:\\demo.txt:

C語言中文網
http://c.biancheng.net
一個學習編程的好網站!

那麼運行結果為:


fgets() 遇到換行時,會將換行符一並讀取到當前字符串。該示例的輸出結果之所以和 demo.txt 保持一致,該換行的地方換行,就是因為 fgets() 能夠讀取到換行符。而 gets() 不一樣,它會忽略換行符。

寫字符串函數fputs

fputs() 函數用來向指定的文件寫入一個字符串,它的原型為:
int fputs( char *str, FILE *fp );
str 為要寫入的字符串,fp 為文件指針。寫入成功返回非負數,失敗返回EOF。例如:
char *str = "http://c.biancheng.net";
FILE *fp = fopen("D:\\demo.txt", "at+");
fputs(str, fp);
表示把把字符串 str 寫入到 D:\\demo.txt 文件中。

【示例】向上例中建立的 d:\\demo.txt 文件中追加一個字符串。
#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;
}
運行程序,輸入C C++ Java Linux Shell,打開 D:\\demo.txt,文件內容為:

C語言中文網
http://c.biancheng.net
一個學習編程的好網站!
C C++ Java Linux Shell

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved