Документация inet_pton()
:
...
1010 * СИНТАКСИС *
#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, если аргумент af
AF_INET6
; адрес должен быть в сетевом порядке байтов. dst
аргумент указывает на буфер, где функция хранит результирующий
текстовая строка; оно не должно быть NULL
. Аргумент размера указывает
размер этого буфера, который должен быть достаточно большим, чтобы вместить текст
строка (INET_ADDRSTRLEN
символов для IPv4, INET6_ADDRSTRLEN
символы для IPv6).
...
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция inet_ntop()
должна возвращать указатель на буфер
содержащий текстовую строку, если преобразование выполнено успешно, и NULL
в противном случае установите errno
для указания ошибки.
...
ОШИБКА
Функции inet_ntop()
и inet_pton()
не будут работать, если:
[EAFNOSUPPORT
] Недопустимый аргумент af
.
[ENOSPC
] Размер результирующего буфера inet_ntop()
недостаточен.
И определение "строки" :
3.92 Строка символов
Непрерывная последовательность символов, оканчивающаяся на
первый нулевой байт.
Учитывая это, ответ на
- Завершение нулевой строки: неясно, нужно ли мне добавлять разделитель нулевой строки во время выделения памяти, когда inet_ntop печатает при компиляции в порядке 3 или более
должно быть ясно. Строка по определению включает нулевой байт. inet_pton()
возвращает указатель на буфер, который содержит такую строку. Никакого добавления нулевого байта не требуется.
И ответ на
- Я не знаю, возвращает ли вывод функции указатель на последний написанный символ или первый написанный символ.
дано стандартом C в 6.3.2.3 Указатели , пункт 7 :
... Когда указатель на объект преобразуется в указатель на тип символа, результат указывает на младший адресуемый байт объекта.
Таким образом, «указатель на буфер, содержащий текстовую строку, если преобразование выполнено успешно», возвращаемый inet_ntop()
, указывает на первый байт в строке.