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