C程序将错误的输出打印到文件

时间:2013-02-15 11:30:02

标签: c network-programming libpcap

我是C语言的新手,我正在尝试为以太网编写一个空闲端口监视器应用程序,该应用程序通过协议测量广播流量并生成文本文件报告,但是它打印到文件的输出是不同于预期   例如,在如下所示的代码的第174行中,它打印出预期值 arp1_source

arp1_source = source;
fprintf(stdout,"arp1->source is %s\n",arp1_source);

但是当它打印出第1365行中相同变量的内容时,会打印出不同的mac地址

fprintf(stdout ,"       %s          %d.%d.%d.%d      %d   %d\n",
  arp1_source,
  arp1_ip_source[0],
  arp1_ip_source[1],
  arp1_ip_source[2],
  arp1_ip_source[3],
  arp1_total,
  arp1);

我不知道为什么会发生这种情况,我不知道我做错了什么,请帮忙,我的代码在下面(虽然它很长,我可以发送完整的代码,如果需要) 感谢。

我已经定义了变量,但是当我正在执行数据包的实时捕获时,第一行打印出的arp1_source中的值与捕获完成后第一行中写入的文本文件中的值不同它可能打印出来

  

“arp1-source is 0e:32:64:89:20:5e”

当它打印出存储在arp1_source内的mac地址到第二个代码所示的文本文件时,它打印出一个错误的mac地址,好像原来的mac地址被另一个覆盖了,我声明了char用逗号关键字存储mac地址的字符串。

1 个答案:

答案 0 :(得分:0)

seems like original mac address is overwritten by another one - 是的,这听起来就像正在发生的事情。

目前写这个问题的方式,没有办法回答它。你想知道为什么在第174行你会得到你期望的结果,但是在第1365行,字符串已经改变了...很明显,最好看到那些1191行代码。正如你所说,这很长,所以这里有一些想法:

  • 搜索代码中arp1_source设置的每个地方,其中设置了另一个变量(具体来说,您有arp1_source的任何双指针的地址?)

  • 你有没有把它的地址传递给一个函数?这是改变它的主要场所

  • 获取调试器并逐步执行代码。你知道价值会在某处发生变化,你只需要弄清楚在哪里。

  • 最糟糕的情况是,您始终可以二进制搜索它。第769行左右的某处打印arp1_source的值,是否符合预期?如果是:打印1066左右的值;如果不是:打印第471行附近的值,继续进行,直到你确切地知道改变值的位置