【问题标题】:C Pointer Values Being MixedC 指针值被混合
【发布时间】:2015-04-08 01:28:25
【问题描述】:

我正在使用一个数据包捕获库,我已经将数据包 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 地址,但在方法调用期间似乎有些混乱。有什么想法吗?

【问题讨论】:

    标签: c pointers


    【解决方案1】:

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

    【讨论】:

    • +1。我的 inet_ntoa 手册页明确指出“inet_ntoa() 返回的字符串位于静态内存区域中。”
    猜你喜欢
    • 2015-05-24
    • 1970-01-01
    • 2010-09-25
    • 2011-09-04
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多