C指针值混合

时间:2015-04-08 01:28:26

标签: c pointers

我正在使用数据包捕获库,我已经将它打印出来的数据包IP地址到控制台使用它正常工作:

printf("       From: %s\n", inet_ntoa(ip->ip_src));
printf("         To: %s\n", inet_ntoa(ip->ip_dst));

下面几行我用不同的.C文件调用一个方法,使用它传递IP地址和端口号:

addpacket(0, inet_ntoa(ip->ip_src), inet_ntoa(ip->ip_dst), ntohs(tcp->th_dport)); 

方法是:void addpacket(int table, char *srcIP, char *dstIP, int port) {...}

但在addpacket方法中,我将此打印到控制台:

printf("---------------------SRC:%s\n", srcIP);
printf("---------------------DST:%s\n", dstIP);
printf("---------------------PRT:%i\n", port);

我得到了这样的结果:

---------------------SRC:192.168.1.64
---------------------DST:192.168.1.64
---------------------PRT:60549

其中源和目标IP地址始终相同。我找不到任何混合起来的地方。如果我在原始.C文件中将其打印到控制台,则会显示正确的IP地址,但在方法调用期间似乎混淆了一些东西。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

inet_ntoa可以使用静态缓冲区来存储结果,这意味着inet_ntoa的第二次调用会覆盖第一次调用的结果。请改用inet_ntop,这样可以提供自己的缓冲区。