今天在写代码时遇到一个问题并于在一个函数传递参数时连续调用inet_ntoa时出现的,下面是问题的模拟代码:


int main()
{
char* pIp1;
char* pIp2;
char ip_addr1[] = "192.168.1.20";
char ip_addr2[] = "192.168.1.40";

struct in_addr addr1;
struct in_addr addr2;

char ip1[16] = {0};
char ip2[16] = {0};

bzero(&addr1, sizeof(struct in_addr));
bzero(&addr2, sizeof(struct in_addr));

inet_aton(ip_addr1, &addr1);
inet_aton(ip_addr2, &addr2);

printf("IP address1: %s\nIP address2: %s\n", inet_ntoa(addr1), inet_ntoa(addr2));

printf("+++IP address1: %s\n", inet_ntoa(addr1));
printf("+++IP address2: %s\n", inet_ntoa(addr2));

pIp1 = inet_ntoa(addr1);
pIp2 = inet_ntoa(addr2);
printf("---IP address1: %s\n", pIp1);
printf("---IP address2: %s\n", pIp2);

return 0;
}


程序输出:

[root@robot ~]# ./a.out

IP address1: 192.168.1.20

IP address2: 192.168.1.20

+++IP address1: 192.168.1.20

+++IP address2: 192.168.1.40

---IP address1: 192.168.1.40

---IP address2: 192.168.1.40

[root@robot ~]#


注意:inet_ntoa()返回的字符串是临时装在一个“静态分配的缓冲”区里面,下一次调用此函数的时候缓冲区会被重写