最简单的方法是读取一个字符,并在读取后立即打印它:
int c;
FILE *file;
file = fopen("test.txt", "r");
if (file) {
while ((c = getc(file)) != EOF)
putchar(c);
fclose(file);
}
c
在int
上方,因为EOF
是负数,而平原char
可能是unsigned
。
如果要分块读取文件,但不分配动态内存,则可以执行以下操作:
#define CHUNK 1024
char buf[CHUNK];
FILE *file;
size_t nread;
file = fopen("test.txt", "r");
if (file) {
while ((nread = fread(buf, 1, sizeof buf, file)) > 0)
fwrite(buf, 1, nread, stdout);
if (ferror(file)) {
}
fclose(file);
}
上面的第二种方法本质上是如何读取具有动态分配的数组的文件:
char *buf = malloc(chunk);
if (buf == NULL) {
}
while ((nread = fread(buf, 1, chunk, file)) > 0) {
}
您的fscanf()
with %s
as格式方法会丢失有关文件中空白的信息,因此它并不完全是将文件复制到stdout
。