c - 打印文件中的最后一个字符
问题描述
我创建了一个包含内容的 4B 文件asdf
。但是,当我执行以下操作时:
fseek(fptr, 0, SEEK_END);
printf("%c", fgetc(fptr));
打印的最后一个字符是?
.
我需要做:
fseek(fptr, -1, SEEK_END);
printf("%c", fgetc(fptr));
让它打印这封信f
。为什么会这样?什么被认为是文件的“结尾” fseek
?
解决方案
使用此代码片段查看奇怪的行为原因。
代码
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。
推荐阅读
- javascript - 使用颤振客户端向 node.js express api 发出 post 请求
- c - 在 C 中为未知长度的字符串实现 BST 的最佳实践是什么?
- task - 任务计划程序无法运行应用程序
- javascript - Google Apps 脚本 - 自动链接工作表
- tensorflow - Tensorflow“条件[1,20,1],然后[10,1,10,1],否则[10,20,1]必须是可广播的”
- java - 在 Spring Boot 中使用 PDFBOX 依赖生成 PDF
- unreal-engine4 - 为什么每当我在项目中包含游戏静态属性时都会出现此错误
- jekyll - 将来自 YML 的帖子、集合和数据组合到页面上显示
- java - 用 Spock 模拟对象
- wordpress - Apache 2.4.46 (Ubuntu) mod_cache_disk Safari 问题