[問題]要如何正確的使用fread,fwite?

看板C_and_CPP作者 (董毛毛)時間14年前 (2010/05/15 23:34), 編輯推噓4(406)
留言10則, 5人參與, 最新討論串1/1
遇到的問題: 希望得到的正確結果: 我有一張影像的檔案是500*1000(*.raw)的矩陣,我想要讀出正確的值(0~255), 所以我想用fread,fwrite把(.raw)檔的數字讀出來,改寫近(B.txt)來確認自己寫 的程式可以正確的讀檔。 可是我寫的程式碼,在執行到fread就會無法執行跳掉。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE *stream; /*以FILE 結構體宣告一個指位器變數*/ FILE *fp; char filename[15]; /*宣告檔案名稱*/ unsigned char image_matrix1[500][1000]; printf("請輸入欲開啟的檔案名稱:"); scanf( "%s", filename) ; /* 輸入檔案名稱*/ fp=fopen("B.txt","w"); stream=fopen(filename,"rb"); if(stream==NULL) { printf("檔案開啟失敗!! \n"); system("pause"); return 0;} else printf("%s檔案以唯讀模式開啟順利 !!\n",filename); /*回傳檔案開啟成功與否*/ fread(&image_matrix1[500][1000], sizeof(unsigned char), 1, stream); fwrite(&image_matrix1[500][1000],sizeof(unsigned char),1,fp ); fclose(stream); fclose(fp); system("pause"); return 0;} 我找不出問題出在哪裡,或是還有更好的方式可以確定,fread有正確的用希望 的方式讀檔? 感謝 開發平台: Dev-C++ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.208.6 ※ 編輯: dongmomo 來自: 61.217.208.6 (05/15 23:34)

05/15 23:51, , 1F
因為你對image_matrix1[500][1000]取值,超過array邊界了
05/15 23:51, 1F

05/15 23:54, , 2F
超過array值邊界?不太懂可以再說的詳細點嗎?感謝
05/15 23:54, 2F

05/16 00:02, , 3F
讀進陣列是給開頭不是給結尾...
05/16 00:02, 3F

05/16 00:03, , 4F
然後個數也不是 1 個 而是 500*1000 個
05/16 00:03, 4F

05/16 00:04, , 5F
如: int arr[1] = {1}; printf("%d\n", arr[1]);
05/16 00:04, 5F

05/16 00:12, , 6F
每次應該讀取一個??
05/16 00:12, 6F

05/16 00:14, , 7F
是希望一次可以讀矩陣的一格。
05/16 00:14, 7F

05/16 00:16, , 8F
雖然各位大大又講了很多,可是小弟抵子不好,還請麻煩
05/16 00:16, 8F

05/16 01:32, , 9F
宣告array[500][1000] 只能用0~499和0~999
05/16 01:32, 9F

05/16 01:33, , 10F
還有你的fread()只讀了一格 要全部讀完寫個兩層迴圈吧~
05/16 01:33, 10F
文章代碼(AID): #1Bxhxjkm (C_and_CPP)