C指针值混合

Cri*_*zly 0 c pointers

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

printf("       From: %s\n", inet_ntoa(ip->ip_src));
printf("         To: %s\n", inet_ntoa(ip->ip_dst));
Run Code Online (Sandbox Code Playgroud)

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

addpacket(0, inet_ntoa(ip->ip_src), inet_ntoa(ip->ip_dst), ntohs(tcp->th_dport)); 
Run Code Online (Sandbox Code Playgroud)

方法是: 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);
Run Code Online (Sandbox Code Playgroud)

我得到这样的结果:

---------------------SRC:192.168.1.64
---------------------DST:192.168.1.64
---------------------PRT:60549
Run Code Online (Sandbox Code Playgroud)

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

nne*_*neo 5

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