1. c語言中,是否可以調用其它文件的函數
可以調用。
一、從一個源文件里調用另一個源文件的函數。在源文件A1.c中調用A2.c 中的函數有兩種方法:
1、在A2.c中有完整的函數定義,在A1.c中添加一下要用到的函數原型(聲明)就可以了,例如:
在A2.c中:有函數void A2(){...};。
在A1.c中:在文件前頭增加一行:void A2();就可以了。
2、把A2.c中完整定義的函數的原型,寫到一個A2.h文件中,然後在A1.c的文件頭增加#include "A2.h"就可以了。
以上兩種方法,在A1.c中都可以正常的調用,就跟在A2.c中調用一樣。
其實函數默認是外部的,只要在其他文件中聲明就能使用;但是注意如果在前面加上static,就只能在本文件中使用了,不能再被其他的文件調用。
二、編寫頭文件:
1、一個.h文件要 對應有一個.c文件,這樣鏈接器就可以調用這個文件里的函數。比如a.h 和 a.c。
在.h文件中:
#ifndef __A_H_
#define __A_H_
#include<stdio.h>
void trans2(double B) ;
double trans1() ;
#endif
2、把相應的函數定義寫在.c文件中。這里要強調一點:要加上#include ".h",這個一般作為一種工程規范。因為如果.c文件中的函數也需要調用同個.c中的其它函數,那麼這個.
c往往會include對應的.h,這樣就不需要為聲明和調用順序而發愁了。比如頭文件里進行了變數的聲明,這個時候對應的.c文件是一定要加上這個頭文件的。
3、再在其他的main.c文件開頭添加#include "a.h"。
(1)c語言文件處理函數擴展閱讀:
include用法:
#include命令預處理命令的一種,預處理命令可以將別的源代碼內容插入到所指定的位置;可以標識出只有在特定條件下才會被編譯的某一段程序代碼;可以定義類似標識符功能的宏,在編譯時,預處理器會用別的文本取代該宏。
插入頭文件的內容
#include命令告訴預處理器將指定頭文件的內容插入到預處理器命令的相應位置。有兩種方式可以指定插入頭文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含標准庫頭文件或者實現版本所提供的頭文件,應該使用第一種格式。如下例所示:
#include<math.h>//一些數學函數的原型,以及相關的類型和宏
如果需要包含針對程序所開發的源文件,則應該使用第二種格式。
採用#include命令所插入的文件,通常文件擴展名是.h,文件包括函數原型、宏定義和類型定義。只要使用#include命令,這些定義就可被任何源文件使用。
2. 請問C語言對文件的讀取有哪些函數,都有什麼功能像fseek();fscanf();fread......什麼的
C語言文件操作函數
13.1C語言文件
1,兩種文件存取方式(輸入,輸出方式)
順序存取
直接存取
2,數據的兩種存放形式
文本文件
二進制文件
13.2文件指針
定義文件類型指針變數的一般形式:
FILE *指針變數名;
例如:
FILE *fp1,*fp2;
13.3打開文件
在使用文件之前,需打開文件.在C里使用fopen函數打開文件.格式為:
fopen(文件名,文件使用方式);
此函數返回一個指向FILE類型的指針.如:
FILE *fp;
fp=fopen("file_1","r");
如果調用成功,fp就指向file_1,否則返回為NULL,所以為了保證文件的正確使用,要進行測試.採用如下語句:
If((fp=fopen("file_1","r"))==NULL)
{
printf("Cannot open this file\n");
exit(0);
}
最常用的文件使用方式及其含義如下:
1,"r".為讀而打開文本文件.(不存在則出錯)
2,"rb".為讀而打開二進制文件.
3,"w".為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內容將被覆蓋)
4,"wb".為寫而打開二進制文件.
5,"a".為在文件後面添加數據而打開文本文件.(若不存在,則新建;反之,在原文件後追加)
6,"ab".為在文件後面添加數據而打開一個二進制文件.
最常用的文件使用方式及其含義如下:
7,"r+".為讀和寫而打開文本文件.(讀時,從頭開始;在寫數據時,新數據只覆蓋所佔的空間,其後不變)
8,"rb+".為讀和寫而打開二進制文件.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
9,"w+".首先建立一個新文件,進行寫操作,隨後可以從頭開始讀.(若文件存在,原內容將全部消失)
10,"wb+".功能與"w+"同.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
最常用的文件使用方式及其含義如下:
11,"a+".功能與"a"相同;只是在文件尾部添加新的數據後,可以從頭開始讀.
12,"ab+".功能與"a+"相同;只是在文件尾部添加新數據之後,可以由位置函數設置開始讀的起始位置.
13.4關閉文件
當文件的讀寫操作完成之後,使用fclose函數關閉文件.格式如下:
fclose(文件指針)
如:fclose(fp);
13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
1,調用putc(或fputc)函數輸出一個字元
調用形式為:
putc(ch,fp);
功能是:將字元ch寫到文件指針fp所指的文件中去.當輸出成功,putc函數返回所輸出的字元;否則,返回一個EOF值.EOF是在stdio.h庫函數文件中定義的符號常量,其值等於-1.
13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
例如:把從鍵盤輸入的文本按原樣輸出到名為file_1.dat文件中,用字元@作為鍵盤輸入結束標志.
#include
Void main()
{
FILE *fpout;
char ch;
if(fpout=fpopen("file_1","w")==NULL)
{
printf("Cannot open this file!\n");
exit(0);
}
ch=getchar();
while(ch!='@')
{ fputc(ch,fpout); ch=getchar(); }
fclose(fpout);
}
2.調用getc(或fgetc)函數輸入一個字元
調用形式為:
ch=getc(pf);
功能是:從pf指定的文件中讀如一個字元,並把它作為函數值返回.
例如:把一個已存在磁碟上的file_1.dat文本文件中的內容,原樣輸出到終端屏幕上.
#include
void main(){
FILE *fpin;
char ch;
if((fpin=fopen("file_1.dat","r"))==NULL)
{ printf("Cann't open this file!\n");exit(0);}
ch=fgetc(fpin);
while (ch!=EOF)
{ putchar(ch); ch=fgetc(fpin);}
fclose(fpin);
}
13.6判斷文件結束函數feof
EOF可以作為文本文件的結束 標志,但不能作為二進制文件的結束符.feof函數既可以判斷二進制文件,又可以判斷文本文件.
例:編寫程序,用於把一個文本文件(源)復制到另一個文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下:
可執行程序名 源文件名 目的文件名
#include
void file(FILE* ,FILE *);
void main(int argc,char *argv[]){
FILE *fpin,*fpout;
if(argc==3)
{ fpin=fopen(argv[1],"r");
fpout=fopen(argv[2],"w");
file(fpin,fpout);
fclose(fpin);fclose(fpout);
}
else if(argc>3)
printf("The file names too many!!\n";
else
printf("There are no file names for input or output!!\n );
}
void file(FILE *fpin,FILE *fpout)
{
char ch;
ch=getc(fpin);
while(!feof(fpin))
{putc(ch,fpout); ch=getc(fpin);}
}
13.7fscanf函數和fprintf函數
1,fscanf函數
fscanf只能從文本文件中按格式輸入,和scanf函數相似,只不過輸入的對象是磁碟上文本文件中的數據.調用形式為:
fscanf(文件指針,格式控制字元串,輸入項表)
例如:fscanf(fp,"%d%d",&a,&b);
fscanf(stdin,"%d%d",&a,&b);
等價於scanf("%d%d",&a,&b);
3.fprintf函數
fprintf函數按格式將內存中的數據轉換成對應的字元,並以ASCII代碼形式輸出到文本文件中.Fprintf函數和printf函數相似,只是將輸出的內容按格式存放到磁碟的文本文件中.調用形式如下:
fprintf(文件指針,格式控制字元串,輸出項表)
如:fprintf(fp,"%d %d",x,y);
以下語句 fprintf(stdout,"%d %d",x,y)
13.8fgets函數和fputs函數
1,fgets函數
fgets函數用來從文件中讀入字元串.調用形式如下:
fgets(str,n,fp);
函數功能是:從fp所指文件中讀入n-1個字元放入str為起始地址的空間內;如果在未讀滿n-1個字元時,則遇到換行符或一個EOF結束本次讀操作,並已str作為函數值返回.
13.8fgets函數和fputs函數
2,fputs函數
fput函數把字元串輸出到文件中.函數調用形式如下:
fputs(str,fp);
注意:為了便於讀入,在輸出字元串時,應當人為的加諸如"\n"這樣的字元串.
#include <stdio.h>
#include <iostream>
int main(int argc, char *argv[])
{
char arr[10] ;
char *ap = "hello!" ;
FILE *fp ;
if ((fp = fopen("hello.txt", "wt+")) == NULL)
{
printf("error!") ;
exit(1) ;
}
fputs(ap, fp) ;
rewind(fp) ; //
fgets(arr, 10, fp) ;
printf("%s\n", arr) ;
fclose(fp) ;
return 0 ;
}
13.9fread函數和fwrite函數
例如有如下結構體:
struct st{
char num[8];
float mk[5];
}pers[30];
以下循環將把這30個元素中的數據輸出到fp所指文件中.
for(i=0;i<30;i++)
fwrite(&pers[i],sizeof(struct st),1,fp);
13.9fread函數和fwrite函數
以下語句從fp所指的文件中再次將每個學生數據逐個讀入到pers數組中.
i=0;
fread(&pers[i],sizeof(struct st),1,fp);
while(!feof(fp))
{ i++;
fread(&pers[i],sizeof(struct st),1,fp);
}
13.10文件定位函數
1,fseek函數
fseek函數用來移動文件位置指針到指定的位置上,接著的讀或寫操作將從此位置開始.函數的調用形式如下:
fseek(pf,offset,origin)
pf:文件指針
offset:以位元組為單位的位移量,為長整形.
origin:是起始點,用來指定位移量是以哪個位置為基準的.
1,fseek函數
位移量的表示方法
標識符 數字 代表的起始點
SEEK_SET 0 文件開始
SEEK_END 2 文件末尾
SEEK_CUR 1 文件當前位置
假設pf已指向一個二進制文件,則;
fseek(pf,30L,SEEK_SET)
fseek(pf,-10L*sizeof(int),SEEK_END)
對於文本文件,位移量必須是0;如:
fseek(pf,0L,SEEK_SET)
fseek(pf,0L,SEEK_END)
2. ftell函數
ftell函數用以獲得文件當前位置指針的位置,函數給出當前位置指針相對於文件開頭的位元組數.如;
long t;
t=ftell(pf);
當函數調用出錯時,函數返回-1L.
我們可以通過以下方式來測試一個文件的長度:
fseek(fp,0L,SEEK_END);
t=ftell(fp);
3.rewind函數
調用形式為:
rewind(pf);
函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭.
13.10文件應用
在磁碟上的test.txt文件中放有10個不小於2的正整數,用函數調用方式編寫程序.要求實現:
1,在被調函數prime中,判斷和統計10個整數中的素數以及個數.
2,在主函數中將全部素數追加到磁碟文件test.txt的尾部,同時輸出到屏幕上.
#include
#include
Int prime(int a[],int n)
{
int I,j,k=0,flag=0;
for(i=0;i { for(j=2;j if(a[i]%j==0)
{ flag=0; break;}
else flag=1;
if(flag)
{a[k]=a[i];k++;}
}
return k;
}
void main(){
int n,I,a[10];
FILE *fp;
fp=fopen("test1-2.txt","r+");
for(n=0;n<10;n++)
fscanf(fp,"%d",&a[n]);
n=prime(a,n);
fseek(fp,o,2);
for(i=0;i {printf("%3d",a[i]);
fprintf(fp,"%3d",a[i]);
}
fclose(fp);
3. C語言中幾個文件操作函數的解釋(要自己說的通俗點的)
#include <stdio.h>
FILE *stream;
void main( void )
{
long l;
float fp;
char s[81];
char c;
stream = fopen( "fscanf.out", "w+" );
if( stream == NULL )
printf( "The file fscanf.out was not opened\n" );
else
{
fprintf( stream, "%s %ld %f%c", "a-string",
65000, 3.14159, 'x' );
/* Set pointer to beginning of file: */
fseek( stream, 0L, SEEK_SET );
/* Read data back from file: */
fscanf( stream, "%s", s );
fscanf( stream, "%ld", &l );
fscanf( stream, "%f", &fp );
fscanf( stream, "%c", &c );
/* Output data read: */
printf( "%s\n", s );
printf( "%ld\n", l );
printf( "%f\n", fp );
printf( "%c\n", c );
fclose( stream );
}
}
看了MSDN上的這個例子應該會用fprintf和fscanf了吧
其它的函數在MSDN上基本上都有例子參考的.
4. C語言中如何引用其它C源文件中的函數
在源文件A1.c中調用A2.c 中的函數有兩種方法:
1、在A2.c中有完整的函數定義,在A1.c中添加一下要用到的函數原型(聲明)就可以了,例如:
在A2.c中:有函數void A2(){...};。
在A1.c中:在文件前頭增加一行:void A2();就可以了。
2、把A2.c中完整定義的函數的原型,寫到一個A2.h文件中,然後在A1.c的文件頭增加#include "A2.h"就可以了。
以上兩種方法,在A1.c中都可以正常的調用,就跟在A2.c中調用一樣。
其實函數默認是外部的,只要在其他文件中聲明就能使用;但是注意如果在前面加上static,就只能在本文件中使用了,不能再被其他的文件調用。
(4)c語言文件處理函數擴展閱讀:
1、一個.h文件要 對應有一個.c文件,這樣鏈接器就可以調用這個文件里的函數。比如a.h 和 a.c。
2、把相應的函數定義寫在.c文件中。這里要強調一點:要加上#include ".h",這個一般作為一種工程規范。因為如果.c文件中的函數也需要調用同個.c中的其它函數,那麼這個.c往往會include對應的.h。比如頭文件里進行了變數的聲明,這個時候對應的.c文件是一定要加上這個頭文件的。
3、再在其他的main.c文件開頭添加#include "a.h"。
5. C語言對文件處理
/****************************************************ifstream 和 ofstream*********************************/
ofstream是從內存到硬碟,ifstream是從硬碟到內存,其實所謂的流緩沖就是內存空間;
在C++中,有一個stream這個類,所有的I/O都以這個「流」類為基礎的,包括我們要認識的文件I/O,stream這個類有兩個重要的運算符:
1、插入器(<<)
向流輸出數據。比如說系統有一個默認的標准輸出流(cout),一般情況下就是指的顯示器,所以,cout<<"Write Stdout"<<'\n';就表示把字元串"Write Stdout"和換行字元('\n')輸出到標准輸出流。
2、析取器(>>)
從流中輸入數據。比如說系統有一個默認的標准輸入流(cin),一般情況下就是指的鍵盤,所以,cin>>x;就表示從標准輸入流中讀取一個指定類型(即變數x的類型)的數據。
在C++中,對文件的操作是通過stream的子類fstream(file stream)來實現的,所以,要用這種方式操作文件,就必須加入頭文件fstream.h。下面就把此類的文件操作過程一一道來。
一、打開文件
在fstream類中,有一個成員函數open(),就是用來打開文件的,其原型是:
void open(const char* filename,int mode,int access);
參數:
filename: 要打開的文件名
mode: 要打開文件的方式
access: 打開文件的屬性
打開文件的方式在類ios(是所有流式I/O類的基類)中定義,常用的值如下:
ios::app: 以追加的方式打開文件
ios::ate: 文件打開後定位到文件尾,ios:app就包含有此屬性
ios::binary: 以二進制方式打開文件,預設的方式是文本方式。兩種方式的區別見前文
ios::in: 文件以輸入方式打開(文件數據輸入到內存)
ios::out: 文件以輸出方式打開(內存數據輸出到文件)
ios::nocreate: 不建立文件,所以文件不存在時打開失敗
ios::noreplace:不覆蓋文件,所以打開文件時如果文件存在失敗
ios::trunc: 如果文件存在,把文件長度設為0
可以用「或」把以上屬性連接起來,如ios::out|ios::binary
打開文件的屬性取值是:
0:普通文件,打開訪問
1:只讀文件
2:隱含文件
4:系統文件
可以用「或」或者「+」把以上屬性連接起來 ,如3或1|2就是以只讀和隱含屬性打開文件。
例如:以二進制輸入方式打開文件c:\config.sys
fstream file1;
file1.open("c:\\config.sys",ios::binary|ios::in,0);
如果open函數只有文件名一個參數,則是以讀/寫普通文件打開,即:
file1.open("c:\\config.sys"); <=> file1.open("c:\\config.sys",ios::in|ios::out,0);
另外,fstream還有和open()一樣的構造函數,對於上例,在定義的時侯就可以打開文件了:
fstream file1("c:\\config.sys");
特別提出的是,fstream有兩個子類:ifstream(input file stream)和ofstream(outpu file stream),ifstream默認以輸入方式打開文件,而ofstream默認以輸出方式打開文件。
ifstream file2("c:\\pdos.def");//以輸入方式打開文件
ofstream file3("c:\\x.123");//以輸出方式打開文件
所以,在實際應用中,根據需要的不同,選擇不同的類來定義:如果想以輸入方式打開,就用ifstream來定義;如果想以輸出方式打開,就用ofstream來定義;如果想以輸入/輸出方式來打開,就用fstream來定義。
二、關閉文件
打開的文件使用完成後一定要關閉,fstream提供了成員函數close()來完成此操作,如:file1.close();就把file1相連的文件關閉。
三、讀寫文件
讀寫文件分為文本文件和二進制文件的讀取,對於文本文件的讀取比較簡單,用插入器和析取器就可以了;而對於二進制的讀取就要復雜些,下要就詳細的介紹這兩種方式
1、文本文件的讀寫
文本文件的讀寫很簡單:用插入器(<<)向文件輸出;用析取器(>>)從文件輸入。假設file1是以輸入方式打開,file2以輸出打開。示例如下:
file2<<"I Love You";//向文件寫入字元串"I Love You"
int i;
file1>>i;//從文件輸入一個整數值。
這種方式還有一種簡單的格式化能力,比如可以指定輸出為16進制等等,具體的格式有以下一些
操縱符 功能 輸入/輸出
dec 格式化為十進制數值數據 輸入和輸出
endl 輸出一個換行符並刷新此流 輸出
ends 輸出一個空字元 輸出
hex 格式化為十六進制數值數據 輸入和輸出
oct 格式化為八進制數值數據 輸入和輸出
setpxecision(int p) 設置浮點數的精度位數 輸出
比如要把123當作十六進制輸出:file1<<hex<<123;要把3.1415926以5位精度輸出:file1<<setpxecision(5)<<3.1415926。
2、二進制文件的讀寫
①put()
put()函數向流寫入一個字元,其原型是ofstream &put(char ch),使用也比較簡單,如file1.put('c');就是向流寫一個字元'c'。
②get()
get()函數比較靈活,有3種常用的重載形式:
一種就是和put()對應的形式:ifstream &get(char &ch);功能是從流中讀取一個字元,結果保存在引用ch中,如果到文件尾,返回空字元。如file2.get(x);表示從文件中讀取一個字元,並把讀取的字元保存在x中。
另一種重載形式的原型是: int get();這種形式是從流中返回一個字元,如果到達文件尾,返回EOF,如x=file2.get();和上例功能是一樣的。
還有一種形式的原型是:ifstream &get(char *buf,int num,char delim='\n');這種形式把字元讀入由 buf 指向的數組,直到讀入了 num 個字元或遇到了由 delim 指定的字元,如果沒使用 delim 這個參數,將使用預設值換行符'\n'。例如:
file2.get(str1,127,'A'); //從文件中讀取字元到字元串str1,當遇到字元'A'或讀取了127個字元時終止。
③讀寫數據塊
要讀寫二進制數據塊,使用成員函數read()和write()成員函數,它們原型如下:
read(unsigned char *buf,int num);
write(const unsigned char *buf,int num);
read()從文件中讀取 num 個字元到 buf 指向的緩存中,如果在還未讀入 num 個字元時就到了文件尾,可以用成員函數 int gcount();來取得實際讀取的字元數;而 write() 從buf 指向的緩存寫 num 個字元到文件中,值得注意的是緩存的類型是 unsigned char *,有時可能需要類型轉換。
例:
unsigned char str1[]="I Love You";
int n[5];
ifstream in("xxx.xxx");
ofstream out("yyy.yyy");
out.write(str1,strlen(str1));//把字元串str1全部寫到yyy.yyy中
in.read((unsigned char*)n,sizeof(n));//從xxx.xxx中讀取指定個整數,注意類型轉換
in.close();out.close();
四、檢測EOF
成員函數eof()用來檢測是否到達文件尾,如果到達文件尾返回非0值,否則返回0。原型是int eof();
例: if(in.eof()) ShowMessage("已經到達文件尾!");
五、文件定位
和C的文件操作方式不同的是,C++ I/O系統管理兩個與一個文件相聯系的指針。一個是讀指針,它說明輸入操作在文件中的位置;另一個是寫指針,它下次寫操作的位置。每次執行輸入或輸出時,相應的指針自動變化。所以,C++的文件定位分為讀位置和寫位置的定位,對應的成員函數是seekg()和seekp()。seekg()是設置讀位置,seekp是設置寫位置。它們最通用的形式如下:
istream &seekg(streamoff offset,seek_dir origin);
ostream &seekp(streamoff offset,seek_dir origin);
streamoff定義於 iostream.h 中,定義有偏移量 offset 所能取得的最大值,seek_dir 表示移動的基準位置,是一個有以下值的枚舉:
ios::beg: 文件開頭
ios::cur: 文件當前位置
ios::end: 文件結尾
這兩個函數一般用於二進制文件,因為文本文件會因為系統對字元的解釋而可能與預想的值不同。例:
file1.seekg(1234,ios::cur); //把文件的讀指針從當前位置向後移1234個位元組
file2.seekp(1234,ios::beg); //把文件的寫指針從文件開頭向後移1234個位元組
6. c語言庫函數的打開文件函數
c語言標准庫中用於打開文件的函數是fopen()。
函數原型:FILE * fopen(const char * path,const char * mode);
參數說明:path指明要打開的文件名,mode指明以什麼方式打開。詳細在下面介紹。
返回值:文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。示例如下
#include<stdio.h>
//根據需要修改成自己要打開的文件即可。
#defineF_PATH"d:\myfile\file.dat"
intmain(void)
{
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"r");//以只讀方式打開一個文件
if(NULL==fp)
{
return-1;//要返回錯誤代碼
}
fclose(fp);//打開一個文件停止操作後,要關閉打開的文件
fp=NULL;//需要指向空,否則會指向原打開文件地址
return0;
}
參數mode的類型:
r 以只讀方式打開文件,該文件必須存在。
r+ 以可讀寫方式打開文件,該文件必須存在。
rb+ 讀寫打開一個二進制文件,允許讀寫數據,文件必須存在。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb 只寫打開或新建一個二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫。
ab+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。
7. C語言文件打開函數
ANSI
C規定文件打開用函數fopen,關閉為fclose。
1、調用方式通常為:
代碼如下:
FILE
*fp;
fp=fopen(文件名,
打開方式);
2、參數說明:
文件名:
形如"myfile.dat"、"F:\data\myfile.dat"等等;
打開方式:
"r"(只讀)
為輸入打開一個文本文件
"w"(只寫)
為輸出打開一個文本文件
"a"(追加)
向文件文件尾添加數據
"rb"(只讀)
為輸入打開一個二進制文件
"wb"(只寫)
為輸出打開一個二進制文件
"r+"(讀寫)
為讀寫打開一個文本文件
"w+"(讀寫)
為讀寫建立一個新的文本文件
"a+"(讀寫)
為讀寫打開一個文本文件
"rb+"(讀寫)
為讀寫打開一個二進制文件
"wb+"(讀寫)
為讀寫建立一個新的二進制文件
"ab+"(讀寫)
為讀寫打開一個二進制文件
3、注意:
(1)用"r"方式打開的文件,不能向其輸入數據,並且該文件已存在,否則出錯;
(2)用"w"方式打開的文件,只能向該文件輸入數據,如果所打開的文件不存在,則在打開時新建一個以指定的名字命名的文件;如果指定文件存在,則在打開時將該文件刪去,然後新建一個新的文件;
(3)如果函數fopen打開文件出錯,則fopen返回一個空指針值NULL;
(4)在程序開始運行時,系統自動打開3個標准文件:標准輸入(stdin),標准輸出(stdout),標准出錯輸
出(stderr)。如果要使用輸入輸出終端,則不需要打開,可以直接使用,如fputc(stdout,'a');向屏幕輸出字元a。
8. C語言文件操作函數freopen的用法
fopen()函數功能:打開一個文件。
原型:FILE * fopen(const char * path,const char * mode);
需要#include<stdio.h>
返回值:文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
一般打開文件會進行讀取或寫入操作,如果打開文件失敗,也就無法順利進行相應的讀寫操作,所以一般在調用fopen()之後要作錯誤判斷及處理。
9. C語言文件操作中fgets函數的使用
#include<stdio.h>
#include<string.h>
//#pragmawarning(disable:4996)
constintMAXLEN=1000;
intmain(){
chars[MAXLEN];//={0};
//memset(s,0,sizeof(s));//s要被多次使用的
FILE*p=fopen("E:\輸入信息得文本.txt","w");
if(p==NULL){
printf("不能打開文件。 ");
return1;
}
while(1){
//gets(s);
fgets(s,MAXLEN,stdin);
//fgtes()函數讀取的串中通常含有' '
intlen=strlen(s);
if(s[len-1]==' ')s[len-1]='