2011-05-31 37 views
0

我在玩libpcap,发现了一件奇怪的事情。输出inet_ntoa的奇怪行为

一个部分是: “来源:SRC_ADDR,要:DST_ADDR”

如果我有一个说法,即 的printf( “%S,为:%s的\ n” 打印, inet_ntoa(ip_hdr-> ip_src),inet_ntoa(ip_hdr-> ip_dst)); 打印的dst_addr与打印的src_addr完全相同。但是,当我在此行设置断点并使用gdb检查存储在ip_src和ip_dst中的值时,它们是不同的。如果用两个语句写成,即 printf(“From:%s,”,inet_ntoa(ip_hdr-> ip_src)); printf(“To:%s \ n”,inet_ntoa(ip_hdr-> ip_dst)); 然后问题消失,输出中的src_addr和dst_addr不同。

回答

0

我面临同样的情况,这是因为该函数使用静态缓冲区。更多的解释可以在inet_ntoa problem中找到(请看第三篇文章)。