struct in_addr a,b,c,d;
if(inet_aton ("10.0.0.1", &a)!=-1 );
printf("a:%s\n", inet_ntoa(a));
if(inet_aton ("10.0.0.2", &b)!=-1 )
printf("b:%s\n", inet_ntoa(b));
打印到IP地址没有问题:
a:10.0.0.1
b:10.0.0.2
然而,我发现:
inet_aton ("10.0.0.3", &c);
inet_aton ("10.0.0.4", &d);
printf("c:%s %s\n", inet_ntoa(c), inet_ntoa(d));
printf("d:%s\n", inet_ntoa(d));
它打印:
c:10.0.0.3 d:10.0.0.3
d:10.0.0.4
奇怪的是,它在这一行打印了错误的d
IP:
printf("c:%s %s\n", inet_ntoa(c), inet_ntoa(d));
我也不知道原因!
发布于 2014-04-16 07:31:40
inet_ntoa
的手册上说:
字符串在静态分配的缓冲区中返回,随后的调用将覆盖该缓冲区。
在printf("c:%s %s\n", inet_ntoa(c), inet_ntoa(d));
中有两个函数覆盖相同的缓冲区。
尝试if (inet_ntoa(c) == inet_ntoa(d))
,您可能会对结果感到惊讶。
https://stackoverflow.com/questions/23113801
复制相似问题