我编写了一个程序,可以读取并输出其自身源文件的内容。我的目的主要是学习如何使用I/O流和"FILE"类型。我在Linux Ubuntu 14.04上使用纯文本文档编写了该程序,并使用终端编译和运行程序。以下是从编译到结束的终端内容:
joseph@ubuntu:~/Desktop$ gcc test.c
joseph@ubuntu:~/Desktop$ ./a.out
File Opened
#include<stdio.h>
#define fileLocation ("/home/joseph/Desktop/test.c")
#define MAXREAD 1000
int main(void)
{
char fileContents[MAXREAD];
int i;
FILE *tf;
tf = fopen(fileLocation, "r");
printf("File Opened\n");
for(i=0;fileContents[i] != EOF; i++)
{
fileContents[i] = fgetc(tf);
printf("%c", fileContents[i]);
}
fclose(tf);
printf("\nFile Closed\n");
return 0;
}
************************************************************
File Closed
这些 * 符号实际上是Unicode (0+FFFD: Replacement Character),但我似乎无法输入它们。
我的问题是,为什么程序没有在最后一个右括号处终止,而是打印了一堆替换字符呢?
fileContents
缓冲区是不必要的 - 你获取一个字符,输出一个字符 - 不需要缓冲区,并且如果文件大于1000字节,它将被覆盖。char ch = fgetc(tf); printf("%c", ch);
就足够了。如果您确实使用缓冲区,可以使用fread()
一次性读取所有内容。 - Cliffordfgetc(tf)
返回257个不同的值。其中256个意味着读取了一个char
并需要打印。另外一个值EOF
则表示文件结束/IO错误。因此需要将结果保存在int
而不是char
中。 - chux - Reinstate Monica