【发布时间】:2020-09-19 02:23:57
【问题描述】:
我有这段代码,但我不明白它是如何工作的:
void print(char * fileName)
{
FILE * fp;
int ch;
fp = fopen(fileName, "r");
while (ftell(fp) < 20)
{
ch = fgetc(fp);
putchar(ch);
}
fclose(fp);
}
那么如果 ftell(fp) 在循环中,它是如何工作的? 因为循环内部没有任何东西可以启动它。 它是如何进步的?
【问题讨论】:
-
循环中有
fgetc()。这会推进文件位置,这就是ftell()报告的内容。首次以"r"模式打开文件时,文件位置为0。每次调用fgetc()都会将文件位置提前1。 -
... 除非在 Windows 环境中以文本模式打开文件,其中行结尾是 两个 字符,其中一个被跳过。因此,您将收到 一个 字符
'\n'换行符,但文件指针前进了2。 -
因为看起来这段代码可能利用了特定于实现的行为,你能告诉我们这段代码适用于什么平台吗?关于它可能打算做什么的任何想法 - 它是如何使用的,它与什么样的文件一起使用?
标签: c file while-loop