c語言中fread函數(shù)語法為size_t fread( void *restrict buffer, size_t size, size_t count, FILE *restrict stream )。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:國際域名空間、虛擬空間、營銷軟件、網(wǎng)站建設、電白網(wǎng)站維護、網(wǎng)站推廣。
我們先用ASCII方式打開這個文件,通過fscanf函數(shù)讀取里面的數(shù)據(jù),然后通過fwrite寫入到新的二進制格式的文件中,這樣我們就得到了一個保存上面信息的二進制格式的文件了,下面就是通過fread函數(shù)進行數(shù)據(jù)的讀取了。
你的程序為什么是亂碼,又不能讀到數(shù)據(jù),原因是fread(void *ptr, int size, int nitems, FILE *stream);是從stream這個文件流中,讀取nitems次,每次size大小的數(shù)據(jù),放到ptr所指向的地址空間。fwrite也是同理。
fread函數(shù)可從文件中讀取二進制數(shù)據(jù) 語法:A = fread(fid, count)A = fread(fid, count, precision)其中fid為指針所指文件中的當前位置,count指讀取的數(shù)據(jù)個數(shù), precision表示以什么格式的數(shù)據(jù)類型讀取數(shù)據(jù)。
static int array[10]; //因為array是局部變量,隨scanffile()函數(shù)的結束,該內存被釋放,因此,你在之后得不到相應的數(shù)據(jù)了。
也就是void* f指向的地址與s數(shù)組的地址相同。
1,先給你說下指針,你把指針理解了運算符的抵消就明白一半了!指針里面是保存的內存地址(就像int變量里面保存的是整型變量一個意思)。
讀數(shù)據(jù)塊函數(shù)調用的一般形式為:fread(buffer,size,count,fp);寫數(shù)據(jù)塊函數(shù)調用的一般形式為:fwrite(buffer,size,count,fp);其中:buffer 是一個指針,在fread 函數(shù)中,它表示存放輸入數(shù)據(jù)的首地址。
return 表示從被調函數(shù)返回到主調函數(shù)繼續(xù)執(zhí)行,返回時可附帶一個返回值,由return后面的參數(shù)指定。
“格式控制”的含義同printf函數(shù);“地址表列”是由若干個地址組成的表列,可以是變量的地址,或字符串首地址。scanf()函數(shù)返回成功賦值的數(shù)據(jù)項數(shù),出錯時則返回EOF。例題scanf函數(shù)輸入數(shù)據(jù)。
C語言中,定義數(shù)組后可以用sizeof命令獲得數(shù)組的長度(即可容納元素個數(shù))。但是通過傳遞數(shù)組名參數(shù)到子函數(shù)中,以獲得數(shù)組長度是不可行的,因為在子函數(shù)當中,數(shù)組名會退化為一個指針。
堆區(qū)的數(shù)組,堆區(qū)的數(shù)組是自己申請的,比如用new申請空間:int* arr = new int[10],堆區(qū)的數(shù)組不能計算出包含元素個數(shù)。棧區(qū)的數(shù)組,棧區(qū)的數(shù)組是系統(tǒng)自動分配的。
void main(){ int j;char s[5]={1,2,3,4,\0}; /*把字符依次賦值給數(shù)組中的每個元素,數(shù)組并不會自動在末尾加上\0,所以要手動加上\0。
int GetLength(int[] arr){return sizeof(arr) / sizeof(int); //就是用sizeof計算出來的數(shù)組長度 除以 數(shù)據(jù)類型的長度。
如果在本函數(shù)內部的話用sizeof應該是可以做到的,你可以多試試。如果你想將此數(shù)組作為參數(shù)傳遞給另外的函數(shù)的話,必須用變量記錄它的大小,因為在傳遞過程中,數(shù)組已經(jīng)退化成為了指針。