gpt4 book ai didi

c - 使用文件 i/o 读取字节长度

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:15 25 4
gpt4 key购买 nike

我试图用下面的代码找出两个不同文件的字节长度,但得到的字节长度为1,这显然是错误的。从长远来看,我正在尝试比较每个文件的内存位置并打印出它们的不同之处,如您所见。所以我没有得到任何结果,并且执行了 printf 语句来查看问题出在哪里。因此,看起来好像我的长度计算不正确。

旁注可能有助于解决我的问题 - 我为 memcmp 找到了这个,但这是否意味着我不能使用 !=?:

如果返回值<0则表示str1小于str2

if Return value if > 0 then it still str2 is less than str1

如果返回值if = 0则表示str1等于str2

请帮忙!

 void compare_two_binary_files(int f1, int f2)
{
ssize_t byte_read_f1, byte_read_f2, length, numRead, bob, length2;
char buf1[BUF_SIZE], buf2[BUF_SIZE], a[100], b[100], counter[100];
int count = 0, b_pos1, b_pos2;
while ((byte_read_f1 = read(f1, buf1, sizeof buf1) > 0) && (byte_read_f2 = read(f2, buf2, sizeof buf2) >0)) {
length = byte_read_f1;
length2 = byte_read_f2;
printf("F1 byte length:%o\n", length);
printf("F2 byte length:%o\n", length2);
ssize_t len = byte_read_f1 <byte_read_f2 ? byte_read_f1 : byte_read_f2;
b_pos1 = memcmp(buf1, buf2, len);
printf("Memcmp: %d\n", b_pos1);
if (memcmp(buf1, buf2, len) != 0){ // use memcmp for speed
ssize_t i;
for (i = 0; i<len; i++){
if (buf1[i] != buf2[i]) break;
}
}

最佳答案

我认为 while 条件有误:

while ((byte_read_f1 = read(f1, buf1, sizeof buf1) > 0) && 
(byte_read_f2 = read(f2, buf2, sizeof buf2) >0))

read(f1, buf1, sizeof buf1) > 0(结果为 true = 1)分配给 byte_read_f1byte_read_f2 也是如此。

这对你有帮助吗?

更新

评论如何建议:

正确的形式是:

while (((byte_read_f1 = read(f1, buf1, sizeof buf1)) > 0) && 
((byte_read_f2 = read(f2, buf2, sizeof buf2)) >0))

关于c - 使用文件 i/o 读取字节长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21468435/

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