gpt4 book ai didi

c - 如何在 C 编程语言中检测 Ctrl-z 文件结束标记

转载 作者:行者123 更新时间:2023-12-04 05:23:28 25 4
gpt4 key购买 nike

我试图检测文件中的最后一个字节是否是 control-z (the MS-DOS originating end of file byte - 0x1A) ,但我没有任何成功。我正在使用

fseek(filePointer,-1,SEEK_END);

隔离最后一个字节,然后我正在使用
fread(buffer, sizeof(buffer[0]), sizeof(custom_char), filePointer);

尝试读取最后一个字节。

当我尝试读取该字节时,我基本上得到了垃圾,我想知道 fread 是否默认忽略了 0x1A 字节,或者人们过去在执行此操作时是否遇到过任何其他古怪的行为。

当前出现故障的逻辑正在尝试读取最后一个字节并考虑在 fread 返回 0 时找到的文件结束标记(fread 应该返回读取的元素数,对吗?):
if(fread(buffer, sizeof(buffer[0]), sizeof(custom_char), filePointer) == 0)
{
// strip off the last byte
}

编辑:
我应该补充一点,我在调用 fopen 之后出现的问题,BOM 被写入,并且 BOM 的第 3 个字节被错误地认为是文件标记的 0xA1 结尾并被剥离。

最佳答案

您需要以二进制模式打开文件:

FILE *filePointer = fopen("yourfile.txt", "rb");

否则文件以文本模式打开,这会将 CR-LF 字符对转换为 C '\n' 字符,并在 Windows/MSDOS 上摆脱 EOF 字符。

关于c - 如何在 C 编程语言中检测 Ctrl-z 文件结束标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13460839/

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