gpt4 book ai didi

c - 除非我暂停程序,否则程序不会结束

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

我的程序按其应有的方式运行 - 打印出适当的值,但它不会自动终止,除非我暂停(ctrl z)它?问题出在哪里?

void compare_two_binary_files(FILE *f1, FILE *f2)
{
unsigned char ch1, ch2;
int flag = 0;
int count = 0;
while (((ch1 = fgetc(f1)) != EOF) &&((ch2 = fgetc(f2)) != EOF)){
if (ch1 != ch2){
printf("Byte pos where two files differ is: %d\n", count + 1);
printf("byte value of file 1: %o\n", ch1);
printf("byte value of file 2: %o\n", ch2);
}
count++;
}
}

最佳答案

fgetc 返回一个 int,而不是一个 unsigned char。 EOF 也是一个 int。将 ch1 和 ch2 更改为整数,它应该可以工作。

发生的情况是 fgetc 返回 -1(EOF 的值),但您将其填充到 unsigned char 中,仅获取低 8 位(全 1)。然后,为了将该值与 EOF 进行比较,通过在左侧添加 0 将 unsigned char 扩展为 int。这不会等于 EOF,因此它永远不会停止。

多一点:

在 32 位中,-1 为 0xFFFFFFFF。将其填充到无符号(或有符号)字符中会得到 0xFF。当它进行比较扩展时,由于它是一个无符号字符,因此它被扩展为0x000000FF,它不等于0xFFFFFFFF。有符号的 char 将扩展为 0xFFFFFFFF,但使用 char 仍然不是一个好主意,因为这样您就无法区分文件结束标记和 0xFF 字节之间的区别。

关于c - 除非我暂停程序,否则程序不会结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395321/

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