下面的程序及其输出表明,
这是该程序。
INET_ADDRSTRLEN
被定义为16
,而INET6_ADDRSTRLEN
被定义为46
。这是该程序。
#include <stdio.h>
#include <arpa/inet.h>
int main()
{
printf("%d\n", INET_ADDRSTRLEN);
printf("%d\n", INET6_ADDRSTRLEN);
return 0;
}
这里是输出结果。
16
46
我能理解为什么INET_ADDRSTRLEN
需要是16
。IPv4地址的最大可能字符串表示占用15个字节,例如"255.255.255.255"
。因此,需要16个字节来存储带有终止空字符的IP地址。
但是,为什么INET6_ADDRSTRLEN
需要是46
呢?根据我的了解,IPv6地址的最大可能字符串表示仅占用39个字节,例如"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
。因此,只需要40个字节来存储带有终止空字符的IPv6地址。
是否存在一个IPv6地址的字符串表示可以占用46个字节?
[ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255%2147483648]:65535
长度为64个字符,需要65个字符的缓冲区。 - Jac Goudsmit