gpt4 book ai didi

c - 使用 fseek 时出现意外输出

转载 作者:太空狗 更新时间:2023-10-29 14:49:58 24 4
gpt4 key购买 nike

假设我们有一个名为 hi.txt 的文本文件,其中包含以下字符串:

AbCdE12345

假设我们运行这段代码:

int main() {
FILE *fp;
fp = fopen("hi.txt","r");
if(NULL == fp) { return 1; }
fseek(fp,-1, SEEK_END);
while (ftell(fp) > 0) {
printf("%c",fgetc(fp));
fseek(fp,-4, SEEK_CUR);
}
fclose(fp);
return 0;
}

当我运行这段代码时,它打印出:3EbCd

当我试图猜测它会打印什么时,我认为它应该是 52d。谁能解释这里发生了什么?

最佳答案

您的文件末尾似乎有一个不可打印的行尾字符。这就是首先打印的内容。然后位置依次移动到3Eb。此时,-3 重新定位失败,因为该位置将变为-2。文件光标停留在它原来的位置,即在接下来打印的 C 处。以下重新定位的尝试也失败了,因此 d 被打印出来。下一次重新定位成功,终止循环。

要检测忽略 fseek 的情况,请检查其返回值,如下所示:

while (ftell(fp) > 0) {
printf("%c",fgetc(fp));
// Successful calls of fseek return zero
if (fseek(fp,-4, SEEK_CUR)) {
// Exit the loop if you can't jump back by 4 positions
break;
}
}

关于c - 使用 fseek 时出现意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17658845/

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