【发布时间】:2017-02-28 17:58:23
【问题描述】:
以下 C 程序向后打印一个文本文件:
#include <stdio.h>
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
int main(int argc, char **argv)
{
FILE *fp = f
open(argv[1], "r");
fseek(fp, -1L, SEEK_END);
while (ftell(fp))
{
putchar(fgetc(fp));
fseek(fp, -2L, SEEK_CUR);
}
putchar(fgetc(fp));
由于程序应该向后打印文本文件,它应该从末尾读取每个字符,而不跳过任何字符。如果是这样,我认为while循环中的调用应该是
fseek(fp, -1L, SEEK_CUR);
为什么偏移量是-2而不是-1?
提前致谢!
【问题讨论】:
-
fgetc() 将其向前移动 1,因此您必须向后移动 2 才能到达它之前的字符。
-
因为 -1 的搜索每次都会显示相同的字符。
-
不保证可移植——文本文件不能随意“寻找”
-
非常感谢。我还是不明白,当我使用 fgetc 获得一个角色时,我想从我刚刚使用 fgetc 获得的角色向后退 1 位,那么为什么偏移量是 -2? @Hans Passant
-
@Tree 因为您不想回到刚刚获得的角色。你想回到之前的那个。