首页 > 解决方案 > 打印文件中的最后一个字符

问题描述

我创建了一个包含内容的 4B 文件asdf。但是,当我执行以下操作时:

fseek(fptr, 0, SEEK_END);
printf("%c", fgetc(fptr));

打印的最后一个字符是?.

我需要做:

fseek(fptr, -1, SEEK_END);
printf("%c", fgetc(fptr));

让它打印这封信f。为什么会这样?什么被认为是文件的“结尾” fseek

标签: c

解决方案


使用此代码片段查看奇怪的行为原因。

代码

int c = fgetc(fp);
if (c == EOF && ferror(fp))
{
    fprintf(stderr, "%s\n", "ddd");
    exit(EXIT_FAILURE);
}else if(c == EOF){
    fprintf(stderr, "%s\n", "EOF");
}

我认为您已到达文件末尾EOF并将被打印。由于EOF预定义的常量等于 -1,您可以通过打印fgetc()输出值看到 -1。

手册页fgetc()说:

返回值 fgetc()、getc() 和 getchar() 将读取的字符作为无符号字符强制转换为文件结尾或错误时的 int 或 EOF。


推荐阅读