gpt4 book ai didi

c - 为什么故意使无效文件定位不会引发任何错误

转载 作者:行者123 更新时间:2023-11-30 14:22:25 25 4
gpt4 key购买 nike

给定一个包含 100 字节的二进制文件。我很确定无效的应该会导致错误,但为什么不呢?我很困惑,一旦 INVALID 应该会引发语义错误,对吧?还是我误解了什么

/* VALID */  fseek(fp, sizeof(char) * 2, SEEK_SET);
/* VALID */ fseek(fp, -2 * sizeof(char), SEEK_END);
/* INVALID */fseek(fp, sizeof(char)* 2, SEEK_END);
/* INVALID */fseek(fp, -2 * sizeof(char), SEEK_SET);
/* INVALID */fseek(fp, 50, SEEK_CUR);
/* VALID */ fseek(fp, -50, SEEK_CUR);
/* INVALID */ fseek(fp, 51, SEEK_CUR);
/* INVALID */ fseek(fp, -51, SEEK_CUR);

最佳答案

您所说的“语义错误”是什么?

无效的文件位置将导致fseek失败,这将由fseek的返回值指示。您必须接收该值并对其进行分析以确定该函数是否成功。上面的代码完全忽略了 fseek 的返回值。

请记住,标准库并不要求所有平台都支持 SEEK_END 定位。平台可能不知道文件末尾到底在哪里(直到您在读取文件时实际遇到它)。例如,某些文件系统可能不会存储确切的文件大小(以字节为单位),而是存储该文件占用的“ block ”或“扇区”数量,这只能作为近似的文件大小。因此,语言规范规定不能保证SEEK_END定位得到有意义的支持。

另请记住,在某些平台上,可能完全允许搜索超出为写入而打开的文件末尾。后续的写入操作将在新位置写入数据,同时用零填充“间隙”。

关于c - 为什么故意使无效文件定位不会引发任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com