inet_pton()
文档:_
...
概要
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *restrict src,
char *restrict dst, socklen_t size);
...
描述
该inet_ntop()
函数应将数字地址转换为适合表示的文本字符串。af 参数应指定地址的族。这可以是AF_INET
或AF_INET6
。如果参数是 , src 参数指向一个保存 IPv4 地址的缓冲区,如果af
参数是,
则指向AF_INET
一个 IPv6 地址;地址必须按网络字节顺序排列。
参数指向函数存储结果文本字符串的缓冲区;不应该。size 参数指定这个缓冲区的大小,它应该足够大以容纳文本字符串(对于 IPv4 的
字符,对于 IPv6 的字符)。af
AF_INET6
dst
NULL
INET_ADDRSTRLEN
INET6_ADDRSTRLEN
...
返回值
如果转换成功,则该inet_ntop()
函数应返回指向包含文本字符串的缓冲区的指针,NULL
否则,并设置errno
为指示错误。
...
错误
inet_ntop()
和功能将在inet_pton()
以下情况下失败:
[ EAFNOSUPPORT
]af
参数无效。
[ ENOSPC
]inet_ntop()
结果缓冲区的大小不足。
以及“字符串”的定义:
3.92 字符串
由第一个空字节终止并包括第一个空字节的连续字符序列。
鉴于此,答案
- 空字符串终止:不清楚是否需要在以 3 或更多顺序编译时 inet_ntop 正在打印的内存分配中添加空字符串分隔符
应该清楚。根据定义,字符串包括空字节。 inet_pton()
返回指向包含此类字符串的缓冲区的指针。不需要添加空字节。
和答案
- 我不知道函数的输出是返回一个指向最后写入字符的指针,还是第一个写入字符的指针。
由 C 标准在6.3.2.3 指针第 7 段中给出:
...当指向对象的指针转换为指向字符类型的指针时,结果指向对象的最低寻址字节。
因此,“如果转换成功,则指向包含文本字符串的缓冲区的指针”指向字符串inet_ntop()
中的第一个字节。