inet_ntoa不可重入性测试

548 阅读1分钟
#include <arpa/inet.h>
#include <iostream>
using namespace std;
int main()
{
  //将点分十进制表示的IPV4地址转换为用网络字节序表示的IPv4地址
  in_addr_t n1 = inet_addr("1.2.3.4");
  struct in_addr stAddr2;
  inet_aton("10.194.71.60", &stAddr2);
  //定义in_addr结构体
  struct in_addr stAddr1;
  stAddr1.s_addr = n1;

  //将网络字节序表示的IP地址转换为点分十进制字符串的IPv4地址
  char *p1 = inet_ntoa(stAddr1);
  char *p2 = inet_ntoa(stAddr2);

  //可以看出p1==p2,因此inet_ntoa是不可重入函数
  cout << p1 << endl;
  cout << p2 << endl;
  return 0;
}

/*
  不可重入函数:
    1、内部使用的静态数据结构
    2、内部调用了malloc或free
    3、标准IO函数
*/