使用printf和inet_ntoa打印ip地址时出现奇怪的错误

时间:2014-04-16 15:27:57

标签: c linux network-programming

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));

我不知道为什么!

1 个答案:

答案 0 :(得分:5)

inet_ntoa手册说:

  

字符串          在静态分配的缓冲区中返回,后续调用将返回          覆盖。

printf("c:%s %s\n", inet_ntoa(c), inet_ntoa(d));中有两个函数覆盖相同的缓冲区。

尝试if (inet_ntoa(c) == inet_ntoa(d)),您可能会对结果感到惊讶。