比较 Const char* 和 char *

标签 c network-programming libpcap

我正在尝试比较这两个字符指针中的值,但我得到了奇怪的输出:

第一个是(libpcap IP 地址):

const char* ip_source = inet_ntop(AF_INET, &ip->ip_src, buffer1, sizeof(buffer1)); //192.168.56.1

第二个是:

char *host_ip = inet_ntoa(((struct sockaddr_in*)a->addr)->sin_addr); //192.168.56.1

我尝试过使用 if (*ip_source == *host_ip)if (strcmp(ip_source, host_ip) == 0)if ( strncmp(ip_source,host_ip,strlen(host_ip))

如何比较这两个变量中存储的 IP 地址,看看两个 IP 地址是否相同?

这是代码:

if (strncmp(ip_source, host_ip, strlen(host_ip)) == 0) // if sent local > remote
{
    printf("   RST/ACK Detected [Local > Remote]\n");
}
else // if sent remote > local
{
    printf("   RST/ACK Detected [Remote > Local]\n");
}

这是结果:

Packet number 2386:
current time: 2015-04-11 15:07:59.412 
  From(src): 192.168.56.1 <---- Local (IP stored in *host_ip)
    To(dst): 192.168.56.2 <---- Remote
   Protocol: TCP
   Src port: 1864
   Dst port: 49750
    Seq Num: 0
    Ack Num: 3556812524
   RST/ACK Detected [Remote > Local] <--- Wrong

在本例中,它返回 -2

最佳答案

第一个只会比较每个字符的第一个字符,而 strcmp 看起来对我来说是正确的。一个是 const 而另一个不是 const 应该没有关系。

关于比较 Const char* 和 char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29578640/

相关文章:

c - 如何使用 c 清除文件的内容?

c - 将标准输出重定向到 C 中的管道

c - 使用 C 在 Windows API 中构建时间表

sockets - Windows-Linux-Mac上的UDP套接字网络断开连接行为

c++ - 如何通过程序配置 DHCP 超时?

c - 进程终止时是否保证发送 RST 数据包?

linux - 所有收到的 VLAN 数据包都变成错误 Vlan 数据包

c - 时间差(以微秒为单位)

c - pcap_set_buffer_size() 中的问题

c - 以特殊的十六进制格式显示整数