【发布时间】:2011-03-18 01:40:51
【问题描述】:
我有两个 char 缓冲区,我试图比较它们的一部分。我有一个奇怪的问题。我有以下代码:
char buffer1[50], buffer2[60];
// Get buffer1 and buffer2 from the network by reading sockets
for(int i = 0; i < 20; i++)
{
if(buffer1[15+i] != buffer2[25+i])
{
printf("%c", buffer1[15+i]);
printf("%c", buffer2[25+i]);
printf("%02x", (unsigned char)buffer1[15+i]);
printf("%02x", (unsigned char)buffer2[25+i]);
break;
}
}
上面的代码是我实际代码的简化版本,我没有在这里复制粘贴,因为它太长了。以防万一这可能会有所帮助,我通过读取套接字在网络上获得了这两个缓冲区。
问题是即使两个缓冲区相同,循环也会中断。为了检查缓冲区中的内容,我在 if 语句中添加了两个打印语句。奇怪的是,printf 语句都为 %c 和 %02x 打印相同的值,但是比较失败并且循环中断。
【问题讨论】:
-
出于普遍的兴趣 - 你添加的演员阵容真的改变了什么吗?
-
我在这里看不到任何东西;也许添加一些代码将
buffer1和buffer2转储到磁盘,将它们存储到/tmp/1和/tmp/2中,然后破解od -x或xxd来尝试找出问题? -
怎么知道break退出循环?退出时 i 的值是多少?为什么不使用 memcmp?
-
我忘了在我的代码中的这篇文章中添加演员表。所以我编辑了这篇文章。我还没有尝试在没有演员表的情况下运行代码。
标签: comparison char buffer