當前位置:首頁 » 編程語言 » c語言文件操作字元
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言文件操作字元

發布時間: 2022-06-26 09:18:36

『壹』 c語言對文件操作,用fputs函數不能把字元串寫入文件

讀寫一個字元數據

經過前面的學習,我們學習了fread()、fwrite()函數的操作,這兩個函數都是對一段「內存塊」進行讀寫操作。那麼,C語言還提供了fgetc()、fputc()函數,對文件中的一個字元進行讀寫操作。這些函數的定義如下:

int fgetc(FILE *stream);

函數說明:從stream文件指針所指向的文件讀取1個字元,通過函數的返回值返回。例如:

char c = fgetc(fp);

就是從fp指向的文件,讀取1個字元的數據,通過函數返回值,設置給字元變數c。

int fputc(int c, FILE *stream);

函數說明:把參數c表示的字元,寫入stream文件指針所指向的文件。例如:

char c = 'M';

fputc(c, fp);

就是把參數c表示的字元變數,寫入文件指針fp指向的文件。如下是一個程序測試例子:

可以看到,新建一個test.txt文件,調用fputc()函數,把一個字元寫入到文件中。然後,再重新打開文件,讀取文件的數據,調用fgetc()函數讀取一個字元,得到的數據是剛剛寫入的字元。所以,通過這個例子,我們學習了fgetc()、fputc()函數的操作,對文件進行一個字元的讀寫操作。

3.5 讀寫一行字元數據

C語言提供了fgets()、fputs()函數對文件進行讀寫「一行」的數據,字元串以'\n'字元換行,注意,所謂的「一行」數據,它的最後一個有效字元是』\n』,表示換行符號。字元串的結束符,還是以』\0』為結尾,表示字元串結束符。其中fgets()函數的定義如下:

char *fgets(char *buf, int size, FILE *stream);

函數說明:從stream函數指針所指向的文件中,讀取size-1個位元組到buf緩存,不是讀取size個位元組,因為,buf[ ]緩存的第size個位元組存放字元串結束符,形成一個有效的字元串。

當讀取到換行符時,或者到達文件末尾時,結束文件的讀取操作。

返回值:讀取數據成功,返回存儲數據的緩存地址,就是參數buf的地址。如果讀取數據失敗,返回NULL。例如,讀取文件完,沒有數據可以再讀取,則返回NULL。

int fputs(const char *buf, FILE *stream);

函數說明:把參數buf指針指向的字元串,寫入到stream指向的文件。參數buf是一個字元串指針,必須指向一個合法的字元串。合法的字元串是以字元串結束符'\0'結束,表示一個字元串的結尾。

返回值:寫入數據成功,返回成功寫入的字元個數。失敗返回EOF標記。

如下是一個程序測試例子:

程序運行結果如下:

可以看到,程序調用fputs()函數,往打開的test.txt文件寫入數據。直接寫入一個字元串。然後,關閉文件,再重新打開文件。調用fgets()函數讀取數據,讀取數據的時候,遇到回車換行的字元'\n',表示一行數據,那麼,就返回讀取到的一行數據。

在實際的項目開發過程中,fgets()函數非常有用。例如,我們定義一個config.txt文件,裡面存放一些系統的配置信息,文件的格式如下:

cat /etc/config.txt

sys_pwd=123456

ApCliAuthMode=WPA2PSK

ApCliEncrypType=AES

ApCliChannel=1

ApCliDefaultKeyID=1

那麼,文件的配置信息是一行一行數據,所以,可以用fgets()函數,快速讀取出每一行系統配置信息。

『貳』 c語言中從文件中按行讀取字元串,並進行相應操作。

用fgets()就可以實現;
參考如下:
FILE
*fp;
char
str[256];
fgets(str,
256,
fp);
意思為從fp中讀一行,放入str中;
如果需要記錄行號的話,設定個量計數就可以。

『叄』 c語言 文本文件的操作 字元寫入

#include<stdio.h>
static
int
write_flag=1;
/*寫文件標志,即是否要將字元串寫入文件*/
void
function(char
*str)
{
int
i=0;
do
{
if((str[i++]=='b')&&(str[i]=='y')&&(str[i+1]=='e'))/*字元串中有「bye字串」*/
{
str[i+2]='\0';
/*截斷字元串*/
write_flag=0;
/*寫文件標志置
0
*/
break;
}
}while(str[i+2]!='\0');
}
int
main()
{
int
i,j;
char
str[100]={0};
FILE
*fp;
fp=fopen("answer.txt","w");
do
{
gets(str);
function(str);
fprintf(fp,"%s\n",str);
}while(write_flag);
fclose(fp);
while(1)
gets(str);/*接收其他無效字元串。自己添加程序結束條件*/
return
0;
}
親測通過!

『肆』 C語言 對文件進行操作的三個主要過程是

C語言對文件進行操作的三個主要過程是:打開文件、操作文件、關閉文件。

C語言的文件處理功能依據系統是否設置「緩沖區」分為兩種:一種是設置緩沖區,另一種是不設置緩沖區。

由於不設置緩沖區的文件處理方式,必須使用較低級的I/O函數(包含在頭文件io.h和fcntl.h中)來直接對磁碟存取,這種方式的存取速度慢,並且由於不是C的標准函數,跨平台操作時容易出問題。


(4)c語言文件操作字元擴展閱讀

C語言文件有不同的類型,在程序設計中,主要用到兩種文件:

(1)程序文件:包括源程序文件(後綴為.c)、目標文件(後綴為.obj)、可執行文件(後綴為.exe)等。這種文件的內容是程序代碼。

(2)數據文件:文件的內容不是程序,而是供程序運行時讀寫的數據,如在程序運行過程中輸出到磁碟(或其他外部設備)的數據,或在程序運行過程中供讀入的數據。如一批學生的成績數據、貨物交易的數據等。

為了簡化用戶對輸入輸出設備的操作,使用戶不必去區分各種輸入輸出設備之間的區別,操作系統把各種設備都統一作為文件來處理。從操作系統的角度看,每一個與主機相連的輸入輸出設備都看作一個文件。例如,終端鍵盤是輸入文件,顯示屏和列印機是輸出文件。

輸入輸出是數據傳送的過程,數據如流水一樣從一處流向另一處,因此常將輸入輸出形象地稱為流(stream),即數據流。流表示了信息從源到目的端的流動。在輸入操作時,數據從文件流向計算機內存,在輸出操作時,數據從計算機流向文件(如列印機、磁碟文件)。

C的數據文件由一連串的字元(或位元組)組成,而不考慮行的界限,兩行數據間不會自動加分隔符,對文件的存取是以字元(位元組)為單位的。輸入輸出數據流的開始和結束僅受程序控制而不受物理符號(如回車換行符)控制,這就增加了處理的靈活性。

『伍』 C語言向文件寫入單個字元

調用庫函數fputc(ch,fp);就把ch表示的一個字元寫入文件了,fp是指向被打開的文件的指針。也可以用fprintf(fp,"%c",ch);操作。

『陸』 c語言:文件操作與字元處理

C語言中沒有輸入輸出語句,所有的輸入輸出功能都用 ANSI C提供的一組標准庫函數來實現。文件操作標准庫函數有:
文件的打開操作 fopen 打開一個文件
文件的關閉操作 fclose 關閉一個文件
文件的讀寫操作 fgetc 從文件中讀取一個字元
fputc 寫一個字元到文件中去
fgets 從文件中讀取一個字元串
fputs 寫一個字元串到文件中去
fprintf 往文件中寫格式化數據
fscanf 格式化讀取文件中數據
fread 以二進制形式讀取文件中的數據
fwrite 以二進制形式寫數據到文件中去
getw 以二進制形式讀取一個整數
putw 以二進制形式存貯一個整數
文件狀態檢查函數 feof 文件結束
ferror 文件讀/寫出錯
clearerr 清除文件錯誤標志
ftell 了解文件指針的當前位置
文件定位函數 rewind 反繞
fseek 隨機定位
# 文件的打開
1.函數原型
FILE *fopen(char *pname,char *mode)
2.功能說明
按照mode 規定的方式,打開由pname指定的文件。若找不到由pname指定的相應文件,就按以下方式之一處理:
(1) 此時如mode 規定按寫方式打開文件,就按由pname指定的名字建立一個新文件;
(2) 此時如mode 規定按讀方式打開文件,就會產生一個錯誤。
打開文件的作用是:
(1)分配給打開文件一個FILE 類型的文件結構體變數,並將有關信息填入文件結構體變數;
(2)開辟一個緩沖區;
(3)調用操作系統提供的打開文件或建立新文件功能,打開或建立指定文件;
FILE *:指出fopen是一個返迴文件類型的指針函數;
3.參數說明
pname:是一個字元指針,它將指向要打開或建立的文件的文件名字元串。
mode:是一個指向文件處理方式字元串的字元指針。所有可能的文件處理方式見表8.1
4.返回值
正常返回:被打開文件的文件指針。
異常返回:NULL,表示打開操作不成功。
例如:

//定義一個名叫fp文件指針
FILE *fp;
//判斷按讀方式打開一個名叫test的文件是否失敗
if((fp=fopen("test","r")) == NULL)//打開操作不成功
{
printf("The file can not be opened.\n");
exit(1);//結束程序的執行
}

要說明的是:C語言將計算機的輸入輸出設備都看作是文件。例如,鍵盤文件、屏幕文件等。ANSI C標准規定,在執行程序時系統先自動打開鍵盤、屏幕、錯誤三個文件。這三個文件的文件指針分別是:標准輸入stdin、標准輸出stdout和標准出錯 stderr。
* 文件的關閉
1. 函數原型
int fclose(FILE *fp);
2. 功能說明
關閉由fp指出的文件。此時調用操作系統提供的文件關閉功能,關閉由fp->fd指出的文件;釋放由fp指出的文件類型結構體變數;返回操作結果,即0或EOF。
3. 參數說明
fp:一個已打開文件的文件指針。
4. 返回值
正常返回:0。
異常返回:EOF,表示文件在關閉時發生錯誤。
例如:
int n=fclose(fp);
*文件的讀寫操作
A. 從文件中讀取一個字元
1. 函數原型
int fgetc(FILE *fp);
2. 功能說明
從fp所指文件中讀取一個字元。
3. 參數說明
fp:這是個文件指針,它指出要從中讀取字元的文件。
4. 返回值
正常返回: 返回讀取字元的代碼。
非正常返回:返回EOF。

B. 寫一個字元到文件中去
1. 函數原型
int fputc(int ch,FILE *fp)
2. 功能說明
把ch中的字元寫入由fp指出的文件中去。
3. 參數說明
ch:是一個整型變數,內存要寫到文件中的字元(C語言中整型量和字元量可以通用)。
fp:這是個文件指針,指出要在其中寫入字元的文件。
4. 返回值
正常返回: 要寫入字元的代碼。
非正常返回:返回EOF。例如,要往"讀打開"文件中寫一個字元時,會發生錯誤而返回一個EOF。
C. 從文件中讀取一個字元串
1. 函數原型
char *fgets(char *str,int n,FILE *fp)
2. 功能說明
從由fp指出的文件中讀取n-1個字元,並把它們存放到由str指出的字元數組中去,最後加上一個字元串結束符'\0'。
3. 參數說明
str:接收字元串的內存地址,可以是數組名,也可以是指針。
n: 指出要讀取字元的個數。
fp:這是個文件指針,指出要從中讀取字元的文件。
4. 返回值
正常返回:返回字元串的內存首地址,即str的值。
非正常返回:返回一個NULL值,此時應當用feof()或ferror()函數來判別是讀取到了文件尾,還是發生了錯誤。例如,要從"寫打開"文件中讀取字元串,將
發生錯誤而返回一個NULL值。
D. 寫一個字元串到文件中去
1. 函數原型
int fputs(char *str,FILE *fp)
2. 功能說明
把由str指出的字元串寫入到fp所指的文件中去。
3. 參數說明
str:指出要寫到文件中去的字元串。
fp:這是個文件指針,指出字元串要寫入其中的文件。
4. 返回值
正常返回: 寫入文件的字元個數,即字元串的長度。
非正常返回:返回一個NULL值,此時應當用feof()或ferror()函數來判別是讀取到了文件尾,還是發生了錯誤。例如,要往一個"讀打開" 文件中寫字元串時,
會發生錯誤而返回一個NULL值。
E. 往文件中寫格式化數據
1.函數原型
int fprintf(FILE *fp,char *format,arg_list)
2.功能說明
將變數表列(arg_list)中的數據,按照format指出的格式,寫入由fp指定的文件。fprintf()函數與printf()函數的功能相同,只是printf()函數是將數據寫入屏幕文件(stdout)。
3.參數說明
fp:這是個文件指針,指出要將數據寫入的文件。
format:這是個指向字元串的字元指針,字元串中含有要寫出數據的格式,所以該字元串成為格式串。格式串描述的規則與printf()函數中的格式串相同。
arg_list:是要寫入文件的變數表列,各變數之間用逗號分隔。
4.返回值
無。
G. 以二進制形式讀取文件中的數據
1. 函數原型
int fread(void *buffer,unsigned sife,unsigned count,FILE *fp)
2. 功能說明
從由fp指定的文件中,按二進制形式將sife*count個數據讀到由buffer指出的數據區中。
3. 參數說明
buffer:這是一個void型指針,指出要將讀入數據存放在其中的存儲區首地址。
sife:指出一個數據塊的位元組數,即一個數據塊的大小尺寸。
count:指出一次讀入多少個數據塊(sife)。
fp:這是個文件指針,指出要從其中讀出數據的文件。
4.返回值
正常返回:實際讀取數據塊的個數,即count。
異常返回:如果文件中剩下的數據塊個數少於參數中count指出的個數,或者發生了錯誤,返回0值。此時可以用feof()和ferror()來判定到底出現了什麼
情況。
H. 以二進制形式寫數據到文件中去
1. 函數原型
int fwrite(void *buffer,unsigned sife,unsigned count,FILE *fp)
2. 功能說明
按二進制形式,將由buffer指定的數據緩沖區內的sife*count個數據寫入由fp指定的文件中去。
3. 參數說明
buffer:這是一個void型指針,指出要將其中數據輸出到文件的緩沖區首地址。
sife:指出一個數據塊的位元組數,即一個數據塊的大小尺寸。
count:一次輸出多少個數據塊(sife)。
fp:這是個文件指針,指出要從其中讀出數據的文件。
4.返回值
正常返回:實際輸出數據塊的個數,即count。
異常返回:返回0值,表示輸出結束或發生了錯誤。
I. 以二進制形式讀取一個整數
1. 函數原型
int getw(FILE *fp)
2. 功能說明
從由fp指定的文件中,以二進制形式讀取一個整數。
3. 參數說明
fp:是文件指針。
4. 返回值
正常返回:所讀取整數的值。
異常返回:返回EOF,即-1。由於讀取的整數值有可能是-1,所以必須用feof()或ferror()來判斷是到了文件結束,還是出現了一個出錯。
J. 以二進制形式存貯一個整數
1.函數原型
int putw(int n,FILE *fp)
2. 功能說明
以二進制形式把由變數n指出的整數值存放到由fp指定的文件中。
3. 參數說明
n:要存入文件的整數。
fp:是文件指針。
4. 返回值
正常返回:所輸出的整數值。
異常返回:返回EOF,即-1。由於輸出的整數值有可能是-1,所以必須用feof()或ferror()來判斷是到了文件結束,還是出現了一個出錯。
* 文件狀態檢查
A. 文件結束
(1) 函數原型
int feof(FILE *fp)
(2) 功能說明
該函數用來判斷文件是否結束。
(3) 參數說明
fp:文件指針。
(4) 返回值
0:假值,表示文件未結束。
1:真值,表示文件結束。
B. 文件讀/寫出錯
(1) 函數原型
int ferror(FILE *fp)
(2) 功能說明
檢查由fp指定的文件在讀寫時是否出錯。
(3) 參數說明
fp:文件指針。
(4) 返回值
0:假值,表示無錯誤。
1:真值,表示出錯。
C. 清除文件錯誤標志
(1) 函數原型
void clearerr(FILE *fp)
(2) 功能說明
清除由fp指定文件的錯誤標志。
(3) 參數說明
fp:文件指針。
(4) 返回值
無。
D. 了解文件指針的當前位置
(1) 函數原型
long ftell(FILE *fp)
(2) 功能說明
取得由fp指定文件的當前讀/寫位置,該位置值用相對於文件開頭的位移量來表示。
(3) 參數說明
fp:文件指針。
(4) 返回值
正常返回:位移量(這是個長整數)。
異常返回:-1,表示出錯。
(5) 實例
* 文件定位
A. 反繞
(1) 函數原型
void rewind(FILE *fp)
(2) 功能說明
使由文件指針fp指定的文件的位置指針重新指向文件的開頭位置。
(3) 參數說明
fp:文件指針。
(4) 返回值
無。(5) 實

B. 隨機定位
(1) 函數原型
int fseek(FILE *fp,long offset,int base)
(2) 功能說明
使文件指針fp移到基於base的相對位置offset處。
(3)參數說明
fp:文件指針。
offset:相對base的位元組位移量。這是個長整數,用以支持大於64KB的文件。
base:文件位置指針移動的基準位置,是計算文件位置指針位移的基點。ANSI C定義了base的可能取值,以及這些取值的符號常量。
(4)返回值
正常返回:當前指針位置。
異常返回:-1,表示定位操作出錯。
* 關於exit()函數
1. 函數原型
void exit(int status)
2. 功能說明
exit()函數使程序立即終止執行,同時將緩沖區中剩餘的數據輸出並關閉所有已經打開的文件。
3. 參數說明
status:為0值表示程序正常終止,為非0值表示一個定義錯誤。
4. 返回值
無。
* 關於feof()函數
1. 函數原型
int feof(FILE *fp)
2. 功能說明
在文本文件(ASCII文件)中可以用值為-1的符號常量EOF來作為文件的結束符。但是在二進制文件中-1往往可能是一個有意義的數據,因此不能用它 來作為文件的結束標志。為了能有效判別文件是否結束,ANSI C提供了標准函數feof(),用來識別文件是否結束。
3. 參數說明
fp:文件指針。
4. 返回值
返回為非0值:已到文件尾。
返回為0值:表示還未到文件尾。

『柒』 c語言修改、刪除文件中的字元串

字元串其實是一個數組。你把後面的abcd依次移到****位置上。然後讓字元串結束就好了。
符串或串(string)是由零個或多個字元組成的有限序列。一般記為
s='a1a2???an'(n>=0)。它是編程語言中表示文本的數據類型。
通常以串的整體作為操作對象,如:在串中查找某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字元串相等的充要條件是:長度相等,並且各個對應位置上的字元都相等。設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的存儲方式是順序存儲方式和鏈接存儲方式。
[編輯本段]字元串函數
1.
連接運算
concat(s1,s2,s3…sn)
相當於s1+s2+s3+…+sn.
例:concat(『11』,'aa』)='11aa』;
2.
求子串。
(s,i,l)
從字元串s中截取第i個字元開始後的長度為l的子串。
例:(『abdag』,2,3)=』bda』
3.
刪除子串。過程
delete(s,i,l)
從字元串s中刪除第i個字元開始後的長度為l的子串。
例:s:=』abcde』;delete(s,2,3);結果s:=』ae』
4.
插入子串。
過程insert(s1,s2,i)
把s1插入到s2的第i個位置
例:s:=abc;insert(『12』,s,2);結果s:=』a12bc』
5.
求字元串長度
length(s)
例:length(『12abc』)=5
在asp中
求字元串長度用
len(s)例:
len("abc12")=5
6.
搜索子串的位置
pos(s1,s2)
如果s1是s2的子串
,則返回s1的第一個字元在s2中的位置,若不是子串,則返回0.
例:pos(『ab』,』12abcd』)=3
7.
字元的大寫轉換。upcase(ch)
求字元ch的大寫體。
例:upcase(『a』)=』a』
8.
數值轉換為數串。
過程
str(x,s)
把數值x化為數串s.
例:str(12345,s);
結果s=』12345』
9.
數串轉換為數值。
過程val(s,x,i)
把數串s轉化為數值x,如果成功則i=0,不成功則i為無效字元的序數
例:val(『1234』,x,i);結果
x:=1234

『捌』 C語言文件操作的單字元讀取

對文件的讀和寫是最常用的文件操作。在C語言中提供了多種文件讀寫的函數:
1.字元讀寫函數 :fgetc和fputc
2.字元串讀寫函數:fgets和fputs
3.數據塊讀寫函數:freed和fwrite
4.格式化讀寫函數:fscanf和fprinf

『玖』 c語言 文件讀取 字元 到一個字元數組

可以通過fgetc函數,將字元讀取出來,並賦值到數組的對應位置上。

fgetc聲明在stdio.h中,其原型為

int fgetc(FILE *fp);

功能為從打開的文件fp中讀取一個字元,並返回。

當讀取成功時,返回讀取到的字元的ascii碼值,否則返回EOF。


以下是逐個讀取字元,存於字元數組,直到讀完整個文件的例子。

#include<stdio.h>
intmain()
{
charbuf[10240];//定義一個足夠大的字元數組存文件數據。
intc;//臨時變數。
intcnt=0;//標記目前讀到幾個位元組。
FILE*fp;//文件指針。

fp=fopen("in.txt","r");//打開文件。
while(1)
{
c=fgetc(fp);//讀一個位元組。
if(c==EOF)break;//到文件尾,退出循環。
buf[cnt]=c;//賦值到字元數組中。
cnt++;//讀到的字元增加一個。
}
fclose(fp);//關閉文件。

return0;
}

『拾』 c語言中如何輸入輸出字元串

在<string.h>頭文件中用字元串處理函數輸入和輸出,gest用來輸入,puts用來輸出。

字元串輸入函數gets,從鍵盤鍵入以回車結束的字元串放入字元數組中,並自動加』'。輸入串長度應小於字元數組維數,字元串中可以包含空格。

字元串輸出函數puts,向顯示器輸出字元串(輸出完,自動換行,即用' '替'')。字元數組必須以''結束。

示例代碼如下:

#include<string.h>

int main()

{

char str[40];

printf("請輸入字元串");

gets(str);

printf("請輸出字元串");

puts(str);

system("pause");

return 0;

}

(10)c語言文件操作字元擴展閱讀

在C中,對文件的操作分為兩種方式,即流式文件操作和I/O文件操作。

流式文件操作,這種方式的文件操作有一個重要的結構FILE,FILE在頭文件stdio.h中定義如下:

typedef struct {

int level; /* fill/empty level of buffer */

unsigned flags; /* File status flags */

char fd; /* File descriptor */

unsigned char hold; /* Ungetc char if no buffer */

int bsize; /* Buffer size */

unsigned char _FAR *buffer; /* Data transfer buffer */

unsigned char _FAR *curp; /* Current active pointer */

unsigned istemp; /* Temporary file indicator */

short token; /* Used for validity checking */

} FILE; /* This is the FILE object */

直接I/O文件操作,這是C提供的另一種文件操作,它是通過直接存/取文件來完成對文件的處理,此類文件操作常用的函數及其所用的一些符號在io.h和 fcntl.h中定義,在使用時要加入相應的頭文件。