2013-02-15 63 views
0

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

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地址被另一个mac地址覆盖,我的de用char关键字来存储mac地址。

+0

你必须给的东西*定义*您尝试打印-_- – StoryTeller 2013-02-15 11:32:06

+1

一MAC地址由六个十六进制字节组成。您打印四位小数,就像它是一个IP地址,而不是一个MAC地址。这是什么? – LSerni 2013-02-15 11:32:48

+0

'arp1_ip_source []','arp1_total'和'arp1'是什么类型的?它们都必须是'int',所以'%d'适用于它们,或者必须将'%d'更改为适当的任何内容(例如,'%ld'代表'long')。 – 2013-02-15 11:51:30

回答

0

seems like original mac address is overwritten by another one - 是的,这听起来像是发生了什么。

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

  • 搜索代码中的每一个地方,arp1_source设置其中另一变量是从它设置(特别是你有没有双指针服用arp1_source的地址?)

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

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

  • 最坏的情况下,你可以随时进行二进制搜索。在769行的某处打印出arp1_source的值,这是您所期望的吗?如果是:打印1066左右的值;如果没有:打印值围绕线471,继续下去,直到你磨练的确切位置值被更改

+0

也许不是一个答案,而是一种渴望评论的方式,并希望它能引导你到那里。 – Mike 2013-02-15 12:58:41