char缓冲区比较

时间:2011-03-18 01:40:51

标签: comparison char buffer

我有两个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语句中添加了两个print语句。奇怪的是,printf语句都为%c和%02x打印相同的值,但比较失败并且循环中断。

2 个答案:

答案 0 :(得分:3)

(免责声明:我不是C / ++专家)

在我看来,当你正在观察时,数据正在发生变化。想到两个快速问题:

  1. 如果你在调试器中运行它,并逐步完成循环,它仍然会发生吗?如果没有,那么我强烈怀疑我的第二个问题会引导你找到答案。
  2. 读取操作是否异步?当你进入for循环时,似乎仍在读取数据,这意味着你没有等待读取完成。

答案 1 :(得分:2)

我唯一看到的是计时问题。如果它们在if语句中不相同,并且它们在print语句中是相同的,则有人在它们之间进行了更改。