0
下面是我的簡單貓問題,它讀取一個文件並在終端上打印它。當我將BUFISZE宏設置爲10時,它工作正常。如果我將BUFSIZE設置爲100,則會打印文件的一部分。如果我將BUFIZE設置爲1024,則不會打印任何內容。你能解釋一下發生了什麼嗎?fread和fwrite的I/O
#include <stdio.h>
#include <string.h>
#define BUFSIZE 10
int main(int argc, char **argv){
char buf[BUFSIZE];
FILE *fp;
if((fp = fopen(*++argv, "r")) == NULL){
printf("cannot open %s\n", *argv);
return 1;
}
while(fread(buf, BUFSIZE, 1, fp) == 1)
if (fwrite(buf,strlen(buf), 1, stdout) != 1){
printf("write error.\n");
return 2;
}
printf("\n");
return 0;
}
你的文件是少超過1024字節,所以'fread'告訴你它無法讀取這個尺寸的對象。我會交換'size'和'count'參數,並且總是讀'size'的'count'字節。 – 2014-09-19 19:23:02
'strlen(buf)'不會達到你期望的。註銷它返回的內容。 – alk 2014-09-19 19:32:15
如果你正在模擬貓,你可能會處理人類可讀的文件。 fgets(3)'是比fread更好的選擇。 – HuStmpHrrr 2014-09-19 20:00:47