C语言以字符串的形式读写文件
讀字符串函數(shù) fgets
fgets() 函數(shù)用來從指定的文件中讀取一個字符串,并保存到字符數(shù)組中,它的用法為:
char *fgets ( char *str, int n, FILE *fp );str 為字符數(shù)組,n 為要讀取的字符數(shù)目,fp 為文件指針。
返回值:讀取成功時返回字符數(shù)組首地址,也即 str;讀取失敗時返回 NULL;如果開始讀取時文件內(nèi)部指針已經(jīng)指向了文件末尾,那么將讀取不到任何字符,也返回 NULL。
注意,讀取到的字符串會在末尾自動添加 ‘\0’,n 個字符也包括 ‘\0’。也就是說,實際只讀取到了 n-1 個字符,如果希望讀取 100 個字符,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 個字符,并保存到字符數(shù)組 str 中。
需要重點說明的是,在讀取到 n-1 個字符之前如果出現(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 ){puts("Fail to open file!");exit(0);}while(fgets(str, N, fp) != NULL){printf("%s", str);}fclose(fp);return 0; }將下面的內(nèi)容復(fù)制到 D:\demo.txt:
百度搜索引擎!
http://www.baidu.com
那么運行結(jié)果為:
fgets() 遇到換行時,會將換行符一并讀取到當(dāng)前字符串。該示例的輸出結(jié)果之所以和 demo.txt 保持一致,該換行的地方換行,就是因為 fgets() 能夠讀取到換行符。而 gets() 不一樣,它會忽略換行符。
寫字符串函數(shù) fputs
fputs() 函數(shù)用來向指定的文件寫入一個字符串,它的用法為:
int fputs( char *str, FILE *fp );str 為要寫入的字符串,fp 為文件指針。寫入成功返回非負(fù)數(shù),失敗返回 EOF。例如:
char *str = "http://www.baidu.com"; 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 ){puts("Fail to open file!");exit(0);}printf("Input a string:");gets(strTemp);strcat(str, "\n");strcat(str, strTemp);fputs(str, fp);fclose(fp);return 0; }運行程序,輸入C Java Linux Shell,打開 D:\demo.txt,文件內(nèi)容為:
百度搜索引擎 http://www.baidu.com C Java Linux Shell總結(jié)
以上是生活随笔為你收集整理的C语言以字符串的形式读写文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 端口宝典
- 下一篇: Java 向量元素的索引值