IPv4地址的二进制形式长度为32,使用我们常用的点分十进制形式进行表示那么最长长度为15,例如“255.255.255.255”
所以在posix的<netinet/in.h>中定义的IPv4地址字符串形式最大长度为16字节,‘\0’结束符也需要占据1个字节:
#define INET_ADDRSTRLEN 16
IPv6地址的二进制形式长度为128,使用16进制形式进行表示如“ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff”,一开始我以为IPv6地址字符串形式最大长度为128/4+7+1=40字节
但是看posix的<netinet/in.h>中定义的IPv6地址字符串形式最大长度为46字节
#define INET6_ADDRSTRLEN 46
原来IPv4映射的IPv6地址可能出现这种格式“ffff:ffff:ffff:ffff:ffff:ffff:255:255:255:255”,也就是45字节,加上结束符就是46字节了