c語言fwrite
A. c語言關於fwrite函數的問題
fwrite就是寫入用的函數,fread和fwrite用於讀寫各種類型的數據塊
第一個參數是讀寫數據的內存區的指針,
第3個是項數,
第2個是每一項的大小,
第4個是文件指針
fwrite返回寫出的項數,不出錯就等於要寫的項數,
所以他判斷是否和1相等來判斷出錯
他這里的(struck
address_list)應該用sizeof(struck
address_list)
不用fopen打開fwrite也沒法寫入,
"wb"是指定fopen的怎樣打開文件,
文件如過不存在,r出錯,
a生成,並且寫入的數據都被添加到文件尾,w也生成
B. c語言 fwrite與結構體
因為你用了記事本打開那個文件,事實上那個文件根本不是文本文件,用記事本打開是錯誤的行為。
文件的真正內容是這樣的:
出現亂碼是正常現象,再說一遍,這根本不是文本文件。
C. C語言fwrite函數
題主你好,這里的1你可以這樣理解,fwrite 第三個參數為1,則寫入一次,每次寫入sizeof(bk1)大小的位元組,你如果寫2,它就會把你sizeof(&bk1)後面位元組的連七八糟的東西都寫進去,你可以定義如下語句試試
你分別改變1的值為 2 3 4 再看看文件內容的變化你就明白了,不懂歡迎追問!
D. C語言,fwrite中的參數都是什麼意思
fwrite(a,
sizeof(int),
5,
fp);
a表示待寫入數據的起始地址
sizeof(int)表示每次寫入的數據長度
(sizeof(int)=4位元組)
5表示一共寫入5次
。和前兩個參數結合起來用,就是從a的位置上獲得5次數據寫入文件中,每次獲得4位元組長度。(本題中,就是指a數組的前5個元素)
fp表示文件句柄(前面用fopen打開的文件)
E. C語言fwrite怎麼寫入文件
C語言fwrite寫入文件可以參考以下的代碼:
//定義一個學生結構體
structStudent_type
{
charname[10];
intnum;
intage;
charaddr[30];
}stud[40];
inti;
FILE*fp;//定義一個文件指針fp
fp=fopen("stu.dat","wb");//以二進制可寫方式打開stu.dat文件
//將40個學生的記錄寫入文件stu.dat中
for(i=0;i<40;i++)
fwrite(&stud[i],sizeof(structStudent_type),1,fp);
(5)c語言fwrite擴展閱讀:
fwrite函數用法
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
返回值:返回實際寫入的數據塊數目
1、buffer:是一個指針,對fwrite來說,是要獲取數據的地址
2、size:要寫入內容的單位元組數
3、count:要進行寫入size位元組的數據項的個數
4、stream:目標文件指針
5、返回實際寫入的數據項個數count
說明:寫入到文件的哪裡與文件的打開模式有關,如果是w+,則是從file pointer指向的地址開始寫,替換掉之後的內容,文件的長度可以不變,stream的位置移動count個數;如果是a+,則從文件的末尾開始添加,文件長度加大。
fseek對此函數有作用,但是fwrite函數寫到用戶空間緩沖區,並未同步到文件中,所以修改後要將內存與文件同步可以用fflush(FILE *fp)函數同步。
F. C中的fwrite函數
fwrite是C語言函數,指向文件寫入一個數據塊。
用法:
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:這個函數以二進制形式對文件進行操作,不局限於文本文件
返回值:返回實際寫入的數據塊數目
(1)buffer:是一個指針,對fwrite來說,是要獲取數據的地址;
(2)size:要寫入內容的單位元組數;
(3)count:要進行寫入size位元組的數據項的個數;
(4)stream:目標文件指針;
(5)返回實際寫入的數據項個數count。
說明:寫入到文件的哪裡? 這個與文件的打開模式有關,如果是w+,則是從file pointer指向的地址開始寫,替換掉之後的內容,文件的長度可以不變,stream的位置移動count個數;如果是a+,則從文件的末尾開始添加,文件長度加大。
fseek對此函數有作用,但是fwrite[1] 函數寫到用戶空間緩沖區,並未同步到文件中,所以修改後要將內存與文件同步可以用fflush(FILE *fp)函數同步。
程序示例:
示例一:
#include <stdio.h>
struct mystruct
{
int i;
char cha;
};
int main(void)
{
FILE *stream;
struct mystruct s;
if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
s.i = 0;
s.cha = 'A';
fwrite(&s, sizeof(s), 1, stream); /* 寫的struct文件*/
fclose(stream); /*關閉文件*/
return 0;
}
示例二:
#include<stdio.h>
#define SIZE 1
typedef struct
{
char name[10];
int num;
int age;
char addr[15];
}student;
student stu[SIZE];
void save()
{
FILE *fp;
int i;
if((fp=fopen("dat.txt","w"))==NULL)
{
printf("無法打開此文件!\n");
return;
}
for(i=0;i<SIZE;i++)
if(fwrite(&stu[i], sizeof(student), 1, fp) != 1)
printf("文件寫入錯誤。!\n");
fclose(fp);
}
void main()
{
int i;
for(i=0;i<SIZE;i++)
scanf("%s%d%d%s",&stu[i].name,&stu[i].num,&stu[i].age,&stu[i].addr);
save();
}
G. C語言,fwrite中的參數都是什麼意思
fwrite(a, sizeof(int), 5, fp);
a表示待寫入數據的起始地址
sizeof(int)表示每次寫入的數據長度 (sizeof(int)=4位元組)
5表示一共寫入5次 。和前兩個參數結合起來用,就是從a的位置上獲得5次數據寫入文件中,每次獲得4位元組長度。(本題中,就是指a數組的前5個元素)
fp表示文件句柄(前面用fopen打開的文件)
H. C語言:函數調用fwrite(&bk1,sizeof(bk1),1,fp);中第三個參數1表示什麼意思
fwrite函數是按位元組寫文件的。fwrite(&bk1,sizeof(bk1),1,fp)中實參的意思是:將從內存地址&bk1開始的sizeof(bk1)大小(以位元組計)的1個板塊寫到fp指針指向的文件中。比如&bk1是0x1329FF00,sizeof(bk1)是100,那就是把內存中從0x1329FF00開始的「1個100個位元組」寫入文件;若寫fwrite(&bk1,sizeof(bk1),2,fp);,則是把內存中從0x1329FF00開始的「2個100個位元組」,即200個位元組寫入文件;寫3則是將連續300個位元組寫入文件,依此類推。希望對你有幫助。
I. C語言中fwrite函數求解釋
void *是個無類型指針,之所以這樣是為了方便不同類型指針賦值。。。void * 給任何指針賦值,或者被賦值都是不會報錯的,因為buffer 可能是個數字,也可能是字元串,他的類型可以是任何東西,那麼作為參數需要一個可接受任何指針的類型,這個類型就是void *。。。。 其實指針就是4位元組的數字,在匯編里是沒有類型區分的,就是個地址。。。C語言會給所有數據和地址給定義類型,是為了編程方便,減少錯誤發生。。。
fwrite 就是按位元組寫數據,他是不需要區分數據時什麼的,所以沒必要知道數據的類型,那麼如果參數是void* 這樣給任何類型指針都能編譯通過(這很重要,編譯通不過就無法變成執行程序)。。。void 進入fwrite 會被強制轉換成 byte 類型的指針,然後將所有數據按位元組寫入文件。。。。
void * 就是個指針傳令兵,當你希望可以得到多種類型數據的指針時,就需要將參數寫成 void *,那麼編譯器就不會阻攔類型不同的指針進行參數傳遞,這就像郵遞員不需要管你信封里是什麼,只要發信者和接信者知道即可。。。。
J. c語言文件操作fwrite和fread
fread是C語言標准為中的一個函數。它從一個文件流中讀數據,最多讀取count個元素,每個元素size位元組,如果調用成功返回實際讀取到的元素個數,如果不成功或讀到文件末尾返回 0。
fwrite是C語言標准庫中的一個函數,指向文件寫入一個數據塊。示例如下:
//讀取一個完整的文件
#include<stdio.h>
#include<stdlib.h>
intmain()
{
FILE*pFile;//文件指針
longlSize;//用於文件長度
char*buffer;//文件緩沖區指針
size_tresult;//返回值是讀取的內容數量
pFile=fopen("myfile.bin","rb");
if(pFile==NULL){fputs("Fileerror",stderr);exit(1);}//如果文件錯誤,退出1
//獲得文件大小
fseek(pFile,0,SEEK_END);//指針移到文件末位
lSize=ftell(pFile);//獲得文件長度
rewind(pFile);//函數rewind()把文件指針移到由stream(流)指定的開始處,同時清除和流相關的錯誤和EOF標記
//為整個文件分配內存緩沖區
buffer=(char*)malloc(sizeof(char)*lSize);//分配緩沖區,按前面的lSize
if(buffer==NULL){fputs("Memoryerror",stderr);exit(2);}//內存分配錯誤,退出2
//該文件復制到緩沖區
result=fread(buffer,1,lSize,pFile);//返回值是讀取的內容數量
if(result!=lSize){fputs("Readingerror",stderr);exit(3);}//返回值如果不和文件大小,讀錯誤
//terminate//文件終止
fclose(pFile);
free(buffer);
return0;
}
綜合使用的例子。
#include<stdio.h>
intmain()
{
FILE*pFile;
floatbuffer[]={2.0,3.0,8.0};
pFile=fopen("myfile.bin","wb");//打開文件寫操作
fwrite(buffer,1,sizeof(buffer),pFile);//把浮點數組寫到文件myfile.bin
fclose(pFile);//關閉文件
floatread[3];
pFile=fopen("myfile.bin","rb");//重新打開文件讀操作
fread(read,1,sizeof(read),pFile);//從文件中讀數據
printf("%f %f %f ",read[0],read[1],read[2]);
fclose(pFile);//關閉文件
return0;
}