【发布时间】:2023-03-19 05:35:01
【问题描述】:
我编写了一个程序,它将读取并输出其自己的源文件的内容。我的目的主要是学习如何使用 I/O 流和“文件”类型。我在 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:替换字符),但我似乎无法输入。
我的问题是,为什么它不在最后一个右花括号处结束程序,而是打印一堆替换字符?
【问题讨论】:
-
文件大小是否
-
关闭,文件大小为381字节。
-
这里不需要
fileContents缓冲区 - 你得到一个字符,你输出一个字符 - 不需要缓冲区,如果文件大于 1000 字节,它将被溢出。char ch = fgetc(tf); printf( "%c", ch ) ;就足够了。如果您确实使用缓冲区,则可以使用fread()一次读取所有内容。 -
@Clifford
fgetc(tf)返回 257 个不同的值。其中 256 个表示已读取char并需要打印。其中之一,EOF表示文件结束/IO 错误。因此需要将结果保存在int而不是char。 -
“为什么它不在最后一个右花括号处结束程序,而是打印一堆替换字符?”仅由@WhozCraig 回答。