C語(yǔ)言fwrite寫入文件可以參考以下的代碼:

成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)昆都侖,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220
//?定義一個(gè)學(xué)生結(jié)構(gòu)體
struct?Student_type
{
char?name[10];
int?num;
int?age;
char?addr[30];
}stud[40];
int?i;
FILE?*fp;??//?定義一個(gè)文件指針fp
fp?=?fopen("stu.dat",?"wb");??//?以二進(jìn)制可寫方式打開stu.dat文件
//?將40個(gè)學(xué)生的記錄寫入文件stu.dat中
for(i=0;?i40;?i++)
fwrite(stud[i],?sizeof(struct?Student_type),?1,?fp);
擴(kuò)展資料:
fwrite函數(shù)用法
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
返回值:返回實(shí)際寫入的數(shù)據(jù)塊數(shù)目
1、buffer:是一個(gè)指針,對(duì)fwrite來(lái)說(shuō),是要獲取數(shù)據(jù)的地址
2、size:要寫入內(nèi)容的單字節(jié)數(shù)
3、count:要進(jìn)行寫入size字節(jié)的數(shù)據(jù)項(xiàng)的個(gè)數(shù)
4、stream:目標(biāo)文件指針
5、返回實(shí)際寫入的數(shù)據(jù)項(xiàng)個(gè)數(shù)count
說(shuō)明:寫入到文件的哪里與文件的打開模式有關(guān),如果是w+,則是從file pointer指向的地址開始寫,替換掉之后的內(nèi)容,文件的長(zhǎng)度可以不變,stream的位置移動(dòng)count個(gè)數(shù);如果是a+,則從文件的末尾開始添加,文件長(zhǎng)度加大。
fseek對(duì)此函數(shù)有作用,但是fwrite函數(shù)寫到用戶空間緩沖區(qū),并未同步到文件中,所以修改后要將內(nèi)存與文件同步可以用fflush(FILE *fp)函數(shù)同步。
參考資料來(lái)源:百度百科-fwrite
要寫入文件,可以按照以下步驟進(jìn)行操作:
1 在代碼中引用stdio.h,即
#include stdio.h
C語(yǔ)言的所有文件操作接口,均聲明在這個(gè)頭文件中。
2 定義FILE *類型的變量。
3 打開文件,使用函數(shù)為fopen。格式為:
FILE *fopen(char *filename, char *mode);
參數(shù)filename為要寫入的文件名,mode為打開的方式,如果僅需寫入文件,可以使用"w"或
"wb"。
返回值為文件指針類型,賦值給之前定義的變量。如果返回值為NULL,代表打開失敗,無(wú)法寫入。
4 對(duì)文件進(jìn)行寫操作。C語(yǔ)言中有很多寫文件的接口,包括fprintf, fwrite, fputs, fputc等等。
寫操作可以執(zhí)行多次。
5 在全部寫操作完成后,執(zhí)行fclose函數(shù)關(guān)閉文件指針。這樣就實(shí)現(xiàn)了C語(yǔ)言寫入文件。
for (i=*p;i*p+1;i++)這一句就錯(cuò)大了。p還沒有賦值,哪來(lái)的*p?所以再?zèng)]有往下看。
14.freopen(打開文件)
相關(guān)函數(shù) fopen,fclose
表頭文件 #includestdio.h
定義函數(shù) FILE * freopen(const char * path,const char * mode,FILE * stream);
函數(shù)說(shuō)明 參數(shù)path字符串包含欲打開的文件路徑及文件名,參數(shù)mode請(qǐng)參考fopen()說(shuō)明。參數(shù)stream為已打開的文件指針。Freopen()會(huì)將原stream所打開的文件流關(guān)閉,然后打開參數(shù)path的文件。
返回值 文件順利打開后,指向該流的文件指針就會(huì)被返回。如果文件打開失敗則返回NULL,并把錯(cuò)誤代碼存在errno 中。
范例
復(fù)制代碼代碼如下:
#includestdio.h
main()
{
FILE * fp;
fp=fopen(“/etc/passwd”,”r”);
fp=freopen(“/etc/group”,”r”,fp);
fclose(fp);
}
15.fseek(移動(dòng)文件流的讀寫位置)
相關(guān)函數(shù) rewind,ftell,fgetpos,fsetpos,lseek
表頭文件 #includestdio.h
定義函數(shù) int fseek(FILE * stream,long offset,int whence);
函數(shù)說(shuō)明 fseek()用來(lái)移動(dòng)文件流的讀寫位置。參數(shù)stream為已打開的文件指針,參數(shù)offset為根據(jù)參數(shù)whence來(lái)移動(dòng)讀寫位置的位移數(shù)。
參數(shù) whence為下列其中一種:
SEEK_SET從距文件開頭offset位移量為新的讀寫位置。SEEK_CUR 以目前的讀寫位置往后增加offset個(gè)位移量。
SEEK_END將讀寫位置指向文件尾后再增加offset個(gè)位移量。
當(dāng)whence值為SEEK_CUR 或SEEK_END時(shí),參數(shù)offset允許負(fù)值的出現(xiàn)。
下列是較特別的使用方式:
1) 欲將讀寫位置移動(dòng)到文件開頭時(shí):fseek(FILE *stream,0,SEEK_SET);
2) 欲將讀寫位置移動(dòng)到文件尾時(shí):fseek(FILE *stream,0,0SEEK_END);
返回值 當(dāng)調(diào)用成功時(shí)則返回0,若有錯(cuò)誤則返回-1,errno會(huì)存放錯(cuò)誤代碼。
附加說(shuō)明 fseek()不像lseek()會(huì)返回讀寫位置,因此必須使用ftell()來(lái)取得目前讀寫的位置。
范例
復(fù)制代碼代碼如下:
#includestdio.h
main()
{
FILE * stream;
long offset;
fpos_t pos;
stream=fopen(“/etc/passwd”,”r”);
fseek(stream,5,SEEK_SET);
printf(“offset=%d/n”,ftell(stream));
rewind(stream);
fgetpos(stream,pos);
printf(“offset=%d/n”,pos);
pos=10;
fsetpos(stream,pos);
printf(“offset = %d/n”,ftell(stream));
fclose(stream);
}
執(zhí)行 offset = 5
offset =0
offset=10
16.ftell(取得文件流的讀取位置)
相關(guān)函數(shù) fseek,rewind,fgetpos,fsetpos
表頭文件 #includestdio.h
定義函數(shù) long ftell(FILE * stream);
函數(shù)說(shuō)明 ftell()用來(lái)取得文件流目前的讀寫位置。參數(shù)stream為已打開的文件指針。
返回值 當(dāng)調(diào)用成功時(shí)則返回目前的讀寫位置,若有錯(cuò)誤則返回-1,errno會(huì)存放錯(cuò)誤代碼。
錯(cuò)誤代碼 EBADF 參數(shù)stream無(wú)效或可移動(dòng)讀寫位置的文件流。
范例 參考fseek()。
17.fwrite(將數(shù)據(jù)寫至文件流)
相關(guān)函數(shù) fopen,fread,fseek,fscanf
表頭文件 #includestdio.h
定義函數(shù) size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
函數(shù)說(shuō)明 fwrite()用來(lái)將數(shù)據(jù)寫入文件流中。參數(shù)stream為已打開的文件指針,參數(shù)ptr 指向欲寫入的數(shù)據(jù)地址,總共寫入的字符數(shù)以參數(shù)size*nmemb來(lái)決定。Fwrite()會(huì)返回實(shí)際寫入的nmemb數(shù)目。
返回值 返回實(shí)際寫入的nmemb數(shù)目。
范例
復(fù)制代碼代碼如下:
#includestdio.h
#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
main()
{
FILE * stream;
set_s(0,”Linux!”);
set_s(1,”FreeBSD!”);
set_s(2,”Windows2000.”);
stream=fopen(“/tmp/fwrite”,”w”);
fwrite(s,sizeof(struct test),nmemb,stream);
fclose(stream);
}
執(zhí)行 參考fread()。
18.getc(由文件中讀取一個(gè)字符)
相關(guān)函數(shù) read,fopen,fread,fgetc
表頭文件 #includestdio.h
定義函數(shù) int getc(FILE * stream);
函數(shù)說(shuō)明 getc()用來(lái)從參數(shù)stream所指的文件中讀取一個(gè)字符。若讀到文件尾而無(wú)數(shù)據(jù)時(shí)便返回EOF。雖然getc()與fgetc()作用相同,但getc()為宏定義,非真正的函數(shù)調(diào)用。
返回值 getc()會(huì)返回讀取到的字符,若返回EOF則表示到了文件尾。
范例 參考fgetc()。
19.getchar(由標(biāo)準(zhǔn)輸入設(shè)備內(nèi)讀進(jìn)一字符)
相關(guān)函數(shù) fopen,fread,fscanf,getc
表頭文件 #includestdio.h
定義函數(shù) int getchar(void);
函數(shù)說(shuō)明 getchar()用來(lái)從標(biāo)準(zhǔn)輸入設(shè)備中讀取一個(gè)字符。然后將該字符從unsigned char轉(zhuǎn)換成int后返回。
返回值 getchar()會(huì)返回讀取到的字符,若返回EOF則表示有錯(cuò)誤發(fā)生。
附加說(shuō)明 getchar()非真正函數(shù),而是getc(stdin)宏定義。
范例
復(fù)制代碼代碼如下:
#includestdio.h
main()
{
FILE * fp;
int c,i;
for(i=0li5;i++)
{
c=getchar();
putchar(c);
}
}
執(zhí)行 1234 /*輸入*/
1234 /*輸出*/
20.gets(由標(biāo)準(zhǔn)輸入設(shè)備內(nèi)讀進(jìn)一字符串)
相關(guān)函數(shù) fopen,fread,fscanf,fgets
表頭文件 #includestdio.h
定義函數(shù) char * gets(char *s);
函數(shù)說(shuō)明 gets()用來(lái)從標(biāo)準(zhǔn)設(shè)備讀入字符并存到參數(shù)s所指的內(nèi)存空間,直到出現(xiàn)換行字符或讀到文件尾為止,最后加上NULL作為字符串結(jié)束。
返回值 gets()若成功則返回s指針,返回NULL則表示有錯(cuò)誤發(fā)生。
附加說(shuō)明 由于gets()無(wú)法知道字符串s的大小,必須遇到換行字符或文件尾才會(huì)結(jié)束輸入,因此容易造成緩沖溢出的安全性問題。建議使用fgets()取代。
范例 參考fgets()
21.mktemp(產(chǎn)生唯一的臨時(shí)文件名)
相關(guān)函數(shù) tmpfile
表頭文件 #includestdlib.h
定義函數(shù) char * mktemp(char * template);
函數(shù)說(shuō)明 mktemp()用來(lái)產(chǎn)生唯一的臨時(shí)文件名。參數(shù)template所指的文件名稱字符串中最后六個(gè)字符必須是XXXXXX。產(chǎn)生后的文件名會(huì)借字符串指針返回。
返回值 文件順利打開后,指向該流的文件指針就會(huì)被返回。如果文件打開失敗則返回NULL,并把錯(cuò)誤代碼存在errno中。
附加說(shuō)明 參數(shù)template所指的文件名稱字符串必須聲明為數(shù)組,如:
char template[ ]=”template-XXXXXX”;
不可用char * template=”template-XXXXXX”;
范例
復(fù)制代碼代碼如下:
#includestdlib.h
main()
{
char template[ ]=”template-XXXXXX”;
mktemp(template);
printf(“template=%s/n”,template);
}
22.putc(將一指定字符寫入文件中)
相關(guān)函數(shù) fopen,fwrite,fscanf,fputc
表頭文件 #includestdio.h
定義函數(shù) int putc(int c,FILE * stream);
函數(shù)說(shuō)明 putc()會(huì)將參數(shù)c轉(zhuǎn)為unsigned char后寫入?yún)?shù)stream指定的文件中。雖然putc()與fputc()作用相同,但putc()為宏定義,非真正的函數(shù)調(diào)用。
返回值 putc()會(huì)返回寫入成功的字符,即參數(shù)c。若返回EOF則代表寫入失敗。
范例 參考fputc()。
23.putchar(將指定的字符寫到標(biāo)準(zhǔn)輸出設(shè)備)
相關(guān)函數(shù) fopen,fwrite,fscanf,fputc
表頭文件 #includestdio.h
定義函數(shù) int putchar (int c);
函數(shù)說(shuō)明 putchar()用來(lái)將參數(shù)c字符寫到標(biāo)準(zhǔn)輸出設(shè)備。
返回值 putchar()會(huì)返回輸出成功的字符,即參數(shù)c。若返回EOF則代表輸出失敗。
附加說(shuō)明 putchar()非真正函數(shù),而是putc(c,stdout)宏定義。
范例 參考getchar()。
24.rewind(重設(shè)文件流的讀寫位置為文件開頭)
相關(guān)函數(shù) fseek,ftell,fgetpos,fsetpos
表頭文件 #includestdio.h
定義函數(shù) void rewind(FILE * stream);
函數(shù)說(shuō)明 rewind()用來(lái)把文件流的讀寫位置移至文件開頭。參數(shù)stream為已打開的文件指針。此函數(shù)相當(dāng)于調(diào)用fseek(stream,0,SEEK_SET)。
返回值
范例 參考fseek()
25.setbuf(設(shè)置文件流的緩沖區(qū))
相關(guān)函數(shù) setbuffer,setlinebuf,setvbuf
表頭文件 #includestdio.h
定義函數(shù) void setbuf(FILE * stream,char * buf);
函數(shù)說(shuō)明 在打開文件流后,讀取內(nèi)容之前,調(diào)用setbuf()可以用來(lái)設(shè)置文件流的緩沖區(qū)。參數(shù)stream為指定的文件流,參數(shù)buf指向自定的緩沖區(qū)起始地址。如果參數(shù)buf為NULL指針,則為無(wú)緩沖IO。Setbuf()相當(dāng)于調(diào)用:setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ)
返回值
26.setbuffer(設(shè)置文件流的緩沖區(qū))
相關(guān)函數(shù) setlinebuf,setbuf,setvbuf
表頭文件 #includestdio.h
定義函數(shù) void setbuffer(FILE * stream,char * buf,size_t size);
函數(shù)說(shuō)明 在打開文件流后,讀取內(nèi)容之前,調(diào)用setbuffer()可用來(lái)設(shè)置文件流的緩沖區(qū)。參數(shù)stream為指定的文件流,參數(shù)buf指向自定的緩沖區(qū)起始地址,參數(shù)size為緩沖區(qū)大小。
返回值
27.setlinebuf(設(shè)置文件流為線性緩沖區(qū))
相關(guān)函數(shù) setbuffer,setbuf,setvbuf
表頭文件 #includestdio.h
定義函數(shù) void setlinebuf(FILE * stream);
函數(shù)說(shuō)明 setlinebuf()用來(lái)設(shè)置文件流以換行為依據(jù)的無(wú)緩沖IO。相當(dāng)于調(diào)用:setvbuf(stream,(char * )NULL,_IOLBF,0);請(qǐng)參考setvbuf()。
返回值
28.setvbuf(設(shè)置文件流的緩沖區(qū))
相關(guān)函數(shù) setbuffer,setlinebuf,setbuf
表頭文件 #includestdio.h
定義函數(shù) int setvbuf(FILE * stream,char * buf,int mode,size_t size);
函數(shù)說(shuō)明 在打開文件流后,讀取內(nèi)容之前,調(diào)用setvbuf()可以用來(lái)設(shè)置文件流的緩沖區(qū)。參數(shù)stream為指定的文件流,參數(shù)buf指向自定的緩沖區(qū)起始地址,參數(shù)size為緩沖區(qū)大小,參數(shù)mode有下列幾種
_IONBF 無(wú)緩沖IO
_IOLBF 以換行為依據(jù)的無(wú)緩沖IO
_IOFBF 完全無(wú)緩沖IO。如果參數(shù)buf為NULL指針,則為無(wú)緩沖IO。
返回值
29.ungetc(將指定字符寫回文件流中)
相關(guān)函數(shù) fputc,getchar,getc
表頭文件 #includestdio.h
定義函數(shù) int ungetc(int c,FILE * stream);
函數(shù)說(shuō)明 ungetc()將參數(shù)c字符寫回參數(shù)stream所指定的文件流。這個(gè)寫回的字符會(huì)由下一個(gè)讀取文件流的函數(shù)取得。
返回值 成功則返回c 字符,若有錯(cuò)誤則返回EOF。
復(fù)制代碼代碼如下:
#include stdio.h
#include stdlib.h
int main()
{
FILE *fp = NULL;
char* str;
char re;
int num = 10;
str = (char*)malloc(100);
//snprintf(str, 10,"test: %s", "0123456789012345678");
// printf("str=%s\n", str);
fp = fopen("/local/test.c","a+");
if (fp==NULL){
printf("Fail to open file\n");
}
// ? ? fseek(fp,-1,SEEK_END);
num = ftell(fp);
printf("test file long:%d\n",num);
fscanf(fp,"%s",str);
printf("str = %s\n",str);
printf("test a: %s\n",str);
while ((re=getc(fp))!=EOF){//getc可以用作fgetc用
printf("%c",re);
}
//fread(str,10,10,fp);
fgets(str,100,fp);
printf("test a: %s\n",str);
sprintf(str,"xiewei test is:%s", "ABCDEFGHIGKMNI");
printf("str2=%s\n", str);
// ?fprintf(fp,"%s\n",str);
fwrite(str,2,10,fp);
num = ftell(fp);
if(str!=NULL){
free(str);
}
fclose(fp);
return 0;
}
文章標(biāo)題:c語(yǔ)言寫入文件函數(shù) c語(yǔ)言有關(guān)文件的函數(shù)
網(wǎng)頁(yè)URL:http://www.chinadenli.net/article32/dooippc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、微信小程序、網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、用戶體驗(yàn)、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)