[問題] 關於檔案處理的問題

看板C_and_CPP作者 (Liou)時間10年前 (2015/05/01 23:56), 10年前編輯推噓1(1012)
留言13則, 6人參與, 最新討論串1/1
嗯...自修看到一半也是發現範例的題目有點看不懂。 先把範例程式碼附上: 1) #include <stdio.h> 2) #include <stdlib.h> 3) #include <fcntl.h> 4) #include <io.h> 5) #include <sys/stat.h> 6) #define SIZE 512 7) int main(void) 8) { 9) char buffer[SIZE]; 10) int f1,f2,bytes; 11) 12) f1=open("example.txt",O_RDONLY|O_TEXT); 13) f2=creat("output1.txt",S_IWRITE); 14) 15) if((f1!=-1)&&(f2!=-1)) 16) { 17) while(!eof(f1)) 18) { 19) bytes=read(f1,buffer,SIZE); 20) write(f2,buffer,bytes); 21) } 22) close(f1); 23) close(f2); 24) printf("檔案複製完成!!\n"); 25) } 26) else 27) printf("檔案開啟失敗!!\n"); 30) 29) system("pause"); 30) return 0; 31) } 問題: (1)第19行我理解的是從f1(example.txt)讀取,一次讀取 SIZE個位元組個資料,在存放至buffer陣列裡,在設定給 Bytes,此時bytes的內容是什麼阿?我怎麼感覺是資料... 另外在19行跟20行間加入printf("%d\n",bytes);,發現 每次都沒有讀取SIZE個,怎麼跟設定的不一樣呢? (2)把第19行的SIZE改為999或是888為什麼就無法執行了 (3)如果把第6行的SIZE定義為0,第19行的SIZE更改為1, 為什麼一樣可以複製?buffer陣列是0耶..... 抱歉,因為真的搞不懂又想很久都想不到才來發問。 謝謝 ※ 編輯: elohacp4 (111.251.5.212), 05/02/2015 00:05:17

05/02 02:07, , 1F
讓我來猜猜這本書要不要丟
05/02 02:07, 1F
大哥,幫忙一下拜託你了,求你!!! ※ 編輯: elohacp4 (114.25.153.133), 05/02/2015 08:27:58

05/02 08:59, , 2F
函數使用沒看
05/02 08:59, 2F
請問意思是再去翻函數這章來看是嗎? ※ 編輯: elohacp4 (42.75.243.8), 05/02/2015 09:43:34

05/02 10:42, , 3F
有system("pause")就可以直接丟掉了(無誤
05/02 10:42, 3F

05/02 15:59, , 4F
無誤
05/02 15:59, 4F

05/02 21:26, , 5F
ISO 9899:2011 6.7.6.2:
05/02 21:26, 5F

05/02 21:26, , 6F
If the expression is a constant expression, it shall hav
05/02 21:26, 6F

05/02 21:26, , 7F
e avalue greater than zero.
05/02 21:26, 7F

05/02 21:28, , 8F
長度為0的陣列是不被標準允許的
05/02 21:28, 8F

05/02 22:32, , 9F
O_TEXT是微軟版本才有的參數,以此開檔,讀到換行就會停了
05/02 22:32, 9F

05/02 22:33, , 10F
二樓意思可能是建議你看read()/write這些函數的使用說明
05/02 22:33, 10F

05/02 23:01, , 11F
read()第三個參數是允許裝入buffer的資料大小,如果超過buff
05/02 23:01, 11F

05/02 23:02, , 12F
er的實際大小,結果是未定義的,要看執行當時的記憶體狀態
05/02 23:02, 12F

05/02 23:03, , 13F
有時會覆蓋到其他資料,有時候卻不會
05/02 23:03, 13F
文章代碼(AID): #1LGw90EA (C_and_CPP)