c語言fwrite怎麼寫入檔案,C語言fwrite怎麼寫入檔案?

時間 2021-12-18 21:41:54

1樓:四捨**入

// 定義乙個學生結構體

struct student_type

char name[10];

int num;

int age;

char addr[30];

}stud[40];

int i;

file *fp;  // 定義乙個檔案指標fpfp = fopen("stu.dat", "wb");  // 以二進位制可寫方式開啟stu.dat檔案

// 將40個學生的記錄寫入檔案stu.dat中for(i=0; i<40; i++)

2樓:匿名使用者

首先你得rgb本身就是位址應該不用&rgb,直接rgb就行,居然能正確寫進去我感覺很詭異……

fwrite參見

第二個引數是你rgb的乙個元素佔多少位元組(因為是char所以應該寫1)

第三個引數是你rgb要寫多少個元素,寫幾個就是幾。

fwrite的第乙個指標是無型別的,所以第二個引數的單位就是位元組。

所以最規範的寫法應該是fwrite(rgb,sizeof(char),3,file);這樣。

不過由於你是連續讀的,也是連續寫的,所以一口氣讀1位元組寫3次(fwrite(rgb,1,3,file))和一口氣讀3位元組寫1次(fwrite(rgb,3,1,file))剛好效果一樣而已。

0xcc是因為是寫3,2就一共從rgb裡去了6個元素,後面的記憶體是沒有定義的,在debug模式下,一些編譯環境(比如vs)會將未定義的記憶體先存入0xcc(使用/gz開關)(這樣你debug是看到一堆cc就說明你記憶體訪問越界了)

最後解決你最後的問題

首先你要rgb[6]來吧記憶體分配好,不然還會cc。然後最規範的寫法是

第一組rgb

fwrite(rgb,sizeof(char),3,file);

第二組rgb

fwrite(rgb+3*sizeof(char),sizeof(char),3,file);

//這裡rgb+33*sizeof(char)等價於&rgb[3]

3樓:天雲小店

fwrite函式在寫檔案時是以二進位制形式進行的。

函式原型:int fwrite(char *ptr, unsigned size, unsigned n, file *fp);

功       能:將ptr所指向的n*size個位元組輸出到fp所指向的檔案中

返 回  值:寫到fp檔案中的資料項的個數

舉例說明如下:

// 定義乙個學生結構體

struct student_type

stud[40];

int i;

file *fp;  // 定義乙個檔案指標fp

fp = fopen("stu.dat", "wb");  // 以二進位制可寫方式開啟stu.dat檔案

// 將40個學生的記錄寫入檔案stu.dat中

for(i=0; i<40; i++)

c語言fwrite寫入檔案後為什麼出現亂碼?

4樓:墨汁諾

這個函式以bai二進位制形式對du

檔案進行操作。zhi

按資料定義結構dao的版寫入保持資料結構的長度,對於數值型別,權再用文字方式開啟時表現為亂碼。例如float a=12345.67,寫入檔案後為4個位元組,開啟後不是文字表示的8個位元組。

寫入資料用fprintf(fp,"%s %s %d 這種方式。不是 fscanf(), 另,注意寫出時的格式裡要有分隔符空格,否則下次讀檔案時shu,字串,數字混在一起無法讀。允許同時「讀寫」的檔案,要注意讀寫位置的控制,必要時用到 迴繞檔案,或fseek。

5樓:匿名使用者

fwrite fread是成塊的對二進

制檔案進行讀寫,如以二進方式處理檔案,檔案裡的內容除了字內

符型以asc碼顯示的容你能用記事本開啟時能看明白,其它數值型別都是按其在記憶體裡的二進位制格式儲存的,你現在又以asc碼的形式強制解釋,當然全時亂碼。fwrite寫,就用fread讀,程式不會出問題,效率還高。

6樓:匿名使用者

這個函式bai

以二進位制形式對檔案進行du操作zhi

按資料定義結

構的寫dao入保持資料結構的長度,對內於數容值型別,再用文字方式開啟時表現為

亂碼。例如float a=12345.67,寫入檔案後為4個位元組,開啟後不是文字表示的8個位元組。

7樓:

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。

它寫入的時候是二進位制。所以你是看不了的。

8樓:匿名使用者

因為寫入檔案的是二進位制資料,所以看上去就是亂碼。

c語言fwrite寫檔案失敗

9樓:匿名使用者

fwrite 操作後會把檔案指標位置 向後 移動size*count位元組。接著再fwrite就從這個當前位置起寫。

while迴圈裡,例如讀1個結構,寫乙個結構,一直到讀到 檔案結束符 eof為止。

這種寫法有沒有必要看情況決定。例如,乙個結構就是乙個學生的成績單,但一開始並不知道檔案裡一共有多少學生,那麼用這種迴圈讀的方法,就可以計數,可以動態分配單元。

計數器初始化為0。成功讀入1個結構,就把計數器加1。直到fread()失敗--返回eof。

int c=fread(***, 10,10, fp), c有沒有可能<100但是》0。 有可能。所以可以 通過 c 是否等於 100

來判斷 是否成功,是否合理, 並採取措施。

例如,有乙個題目,是讀入1個檔案,平均地拆成3個檔案輸出,再讀入這3個檔案,合成1個檔案。

因為檔案的位元組總數,未必是3 的倍數,所以 想讀的個數和真正讀到的個數就有可能不同。要使拆開的檔案再合起來,與原檔案一模一樣,就要用到c。

10樓:旅春冬

這個程式原則意義上是沒有問題的,可能存在的錯誤有以下幾點:

一、欲讀取的檔案沒有那麼多資料,也就是說你想要讀取的檔案沒有大到0x210000有資料,所以導致不能成功。

二、採用rb+的方式寫入檔案(以更新方式開啟(讀寫))。這個也是沒有問題的。但是要求以此種方式開啟的檔案必須存在,也就是說你必須在執行這個程式之前把這個檔案建好。

三、採用上述的方式寫入到0x210000位置時,如果檔案的是空的,那麼程式會在檔案的0x210000位址之前填充0.

所有可能的問題就上述這些,我自己執行過這個程式,在解決好上面的問題之後,程式沒有出錯,因此,可以嘗試把這個位址調小一點。

11樓:苦澀無人愛

file *fp;

fp=fopen("絕對路徑","w");

if(fp==null)

fwrite(,,,fp);

如果出錯,請先看報錯時fopen出現的資訊,是不是不存在檔案或段的意思

12樓:感情

描述 清楚一些,檔案是否存在 檔案開啟是否正確 是否有寫許可權

13樓:歲月流金

strerr和errorno結合,可以查出原因

c語言 fwrite()和fprintf()的區別

14樓:繡乞群群

當使用fwrite將乙個int型數字65寫入文字檔案時,由於65對應的二進位制數是1000001,十六進製制數是0x41,儲存的是以二進位制的形式1000001.在notepad++中使用十六進製制方式開啟顯示的是:0x0041,轉換為十進位制則為65,使用記事本開啟這個文字檔案後顯示的是a,因為記事本程式預設為儲存在文字檔案中的資料都是ascii碼形式儲存,它把65當做ascii碼翻譯為字元a。

當使用fpintf將乙個int型數字65寫入文字檔案時,將65每一位轉換為ascii碼儲存,6、5分別對應ascii碼54、53,儲存的是ascii碼54、53.在notepad++中使用十六進製制方式開啟顯示的是:3635,轉換為十進位制則為54、53,這正是數字6、5的ascii碼。

使用記事本開啟這個文字檔案時,記事本將儲存在其中的54、53當做ascii碼翻譯為字元6、5顯示,我們看到的是便是字元65。

15樓:與子如初見

fwrite是按二進位制寫資料到檔案,而fprintf是嚴格按照引數裡邊的格式控制符,寫資料到檔案。可以是十進位制,二進位制,字串,等等,而且可以直接開啟檔案檢視資料,二進位制檔案是不能直接開啟檔案檢視資料的。

16樓:匿名使用者

一、作用區別:

fwrite是c語言函式,指向檔案寫入乙個資料塊。

fprintf是c/c++中的乙個格式化寫—庫函式;其作用是格式化輸出到乙個流/檔案中;

二、函式原型區別:

fwrite:size_t fwrite(const void* buffer, size_t size, size_t count, file* stream);

fprintf:int fprintf (file* stream, const char*format, [argument]);

三、返回值區別:

fwrite:返回實際寫入的資料項個數。

fprintf:返回值是輸出的字元數,發生錯誤時返回乙個負值。

17樓:匿名使用者

fprintf(fp, "%d", buffer); 是將格式化的資料寫入檔案

fprintf(檔案指標,格式字串,輸出表列);

是以二進位方式寫入檔案

fwrite(資料,資料型別大小(位元組數),寫入資料的最大數量,檔案指標);

c語言fwrite實現整形陣列寫入檔案,要求實現兩種形式,比如:陣列整個寫入檔案或逐個寫入,要求測試通過

18樓:

#include

#include

#include

int main()

if((fp2=fopen("data2.dat","at+"))==null)

srand(time(null));

for(i=0;i<10;i++)

fwrite(data,sizeof(int),10,fp2);//一塊寫入

printf("\n");

fclose(fp1);

fclose(fp2);

return 0;}

c語言fwrite寫檔案失敗,C語言中的fwrite(或是fopen)的問題,追加寫入就錯誤。

file fp fp fopen 絕對路徑 w if fp null fwrite fp 如果出錯,請先看報錯時fopen出現的資訊,是不是不存在檔案或段的意思 描述 清楚一些,檔案是否存在 檔案開啟是否正確 是否有寫許可權 strerr和errorno結合,可以查出原因 這個程式原則意義上是沒有問...

c語言寫入檔案方法

要寫入檔案,可以按照以下步驟進行操作 1 在 中引用stdio.h,即 include c語言的所有檔案操作介面,均宣告在這個標頭檔案中。2 定義file 型別的變數。3 開啟檔案,使用函式為fopen。格式為 file fopen char filename,char mode 引數filenam...

c語言文字檔案的操作符寫入,c語言 文字檔案的操作 字元寫入

首先利用fopen函式建立乙個可以寫入的檔案,然後利用fprintf函式寫出你想寫入的東西。具體語句如下 file fp 檔案指標 char ch a fp fopen 1.txt w 建立乙個可寫入的檔案1.txt fprintf fp,c n ch 往1.txt中寫入字元 如果想寫入多個字元,可...

用c語言向一tt檔案寫入內容後將該寫入的內容從

跟你檔案的指標有關係,當你新增完資料的時候,檔案指標是移動到了最後 fprintf後加 fseek stream,0,seek set 如何用c語言將一段文字寫入txt文字,然後讀出文字中的內容顯示在螢幕上?求指導。用c語言建立乙個txt檔案,並且寫入資料 include include inclu...

c語言怎麼呼叫dll檔案,C語言如何呼叫DLL

1 新建dlltest資料夾,在該資料夾中新建source資料夾。2 在source資料夾中造add.c。3 win r cmd請出總指揮 命令列 輸入。4 繼續輸入 路徑也要隨機應變 link dll out e vcfile dlltest source add.dll e vcfile dll...