ip_src)); printf(-6ren">
gpt4 book ai didi

C 指针值混合

转载 作者:太空宇宙 更新时间:2023-11-04 05:55:06 25 4
gpt4 key购买 nike

我正在使用数据包捕获库,它可以将数据包 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 地址和目标 IP 地址始终相同。我找不到我把它混在一起的任何地方。如果我在原始 .C 文件中将其打印到控制台,则会显示正确的 IP 地址,但在方法调用期间似乎有些东西混淆了。有什么想法吗?

最佳答案

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

关于C 指针值混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29504323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com