0

我是 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 源是 0e:32:64:89:20:5e”

并且当要将存储在 arp1_source 中的mac地址打印到文本文件中时,如第二个代码所示,它会打印出错误的mac地址,好像原来的mac地址被另一个覆盖了,我声明了要存储的char字符串带有 const 关键字的 mac 地址。

4

1 回答 1

0

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

目前这个问题的写法,没有办法回答。您想知道为什么在第 174 行会得到预期的结果,但是在第 1365 行,字符串发生了变化……知道最好看一下这 1191 行代码。正如你所说,这很长,所以这里有一些想法:

  • 搜索代码中arp1_source设置的每个位置从中设置另一个变量的位置(特别是您是否有任何双指针获取arp1_source的地址?)

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

  • 获取调试器并单步执行您的代码。你知道某个地方的值会发生变化,你只需要弄清楚在哪里。

  • 最坏的情况,你总是可以对它进行二分搜索。在第 769 行附近的某处打印 的值arp1_source,这是您所期望的吗?如果是:打印大约 1066 的值;如果否:打印第 471 行附近的值,继续进行,直到您准确了解更改值的位置

于 2013-02-15T12:58:16.857 回答