我們在用c語言編寫程式時,一般使用標準檔案系統,即緩衝檔案系統。系統在記憶體中為每個正在讀寫的檔案開闢「檔案緩衝區」,在對檔案進行讀寫時資料都經過緩衝區。要對檔案進行讀寫,系統首先開闢一塊記憶體區來儲存檔案資訊,儲存這些資訊用的是乙個結構體,將這個結構體typedef為file型別。我們首先要定義乙個指向這個結構體的指標,當程式開啟乙個檔案時,我們獲得指向file結構的指標,通過這個指標,我們就可以對檔案進行操作。例如:
#i nclude
#i nclude
int main()
fwrite(buffer, 1, strlen("this is a test"), fp);
fclose(fp);
return 0;
}通過以上**,我們就在c盤的根目錄下建立了乙個名為example擴充套件名為.txt的檔案,我們開啟可以看到上面寫上了this is a test。當我們對它將它讀出時,用如下**:
#i nclude
#i nclude
int main()
fseek(fp, 0l, seek_end);
len = ftell(fp);
rewind(fp);
fread(buffer, 1, len , fp);
printf("%s",buffer);
fclose(fp);
getch();
return 0;
}可以看到,當我們使用memset了以後,讀出了一大堆亂碼,這是為什麼呢?原因是我們在fwrite函式時寫入的位元組數是用strlen求得的,也就是說字串最後的'/0'並沒有寫到檔案中去。所以我們從檔案中讀到buffer中時也自然沒有'/0',因為buffer中的數是隨機的,除非buffer中最後乙個字元的下乙個數恰好隨機到0(可能性很小,這裡用memset將它排除),否則以%s將buffer中的字元輸出時遇不到0,所以亂碼產生。解決的辦法有很多,你可以在向檔案寫資料時多寫入乙個位元組,系統會自動寫入0,fwrite(buffer, 1, strlen("this is a test")+1, fp);這樣讀出時最後就有乙個0了。或者讀出操作完成後,在最後乙個字元後面補上乙個0:buffer[len] = 0;這樣問題也可得到解決。
fread函式和fwrite函式
1.函式功能 用來讀寫乙個資料塊。2.一般呼叫形式 fread buffer,size,count,fp fwrite buffer,size,count,fp 3.說明 1 buffer 是乙個指標,對fread來說,它是讀入資料的存放位址。對fwrite來說,是要輸出資料的位址。2 size 要...
fread函式和fwrite函式
1.函式功能 用來讀寫乙個資料塊。2.一般呼叫形式 fread buffer,size,count,fp fwrite buffer,size,count,fp 3.說明 1 buffer 是乙個指標,對fread來說,它是讀入資料的存放位址。對fwrite來說,是要輸出資料的位址。2 size 要...
fread函式 fwrite函式
1.fread函式 函式原型 size t fread void buffer size t size size t count file stream 功 能 從乙個檔案流中讀資料,讀取count 個元素,每個元素 size 位元組.如果呼叫成功返回 count.如果呼叫成功則實際讀取 size ...