ULONG srcAddr = inet_addr("1.1.1.1");
ULONG destAddr = inet_addr("2.2.2.2");
printf("%s -- %s\n", inet_ntoa(*(in_addr*)&srcAddr), inet_ntoa(*(in_addr*)&destAddr));
printf("%s\n", inet_ntoa(*(in_addr*)&srcAddr));
printf("%s\n", inet_ntoa(*(in_addr*)&destAddr));
打印结果如下:
1.1.1.1 -- 1.1.1.1
1.1.1.1
2.2.2.2
很奇怪吧?
原因:inet_ntoa是非线程安全的,返回结果是函数内部的静态变量的值。所以不用在外面分配内存。
解决办法:使用线程安全的inet_ntop替代