если я сделаю системный вызов, скажем
struct hostent * gethostbyaddr (const char *addr, int len, int family );
и он возвращает struct*, мне нужно скопировать структуру куда-то, где я "владею", вместо того, чтобы напрямую использовать указатель?
struct*
Документация gethostbyaddr читает (см. Раздел «Примечания»):
gethostbyaddr
Функции gethostbyname () и gethostbyaddr () могут возвращать указатели на статические данные, которые могут бытьперезаписывается последующими звонками.Копирование структуры hostent недостаточно, поскольку оно содержит указатели;требуется глубокая копия.
Это означает, что вам нужно скопировать структуру, если вы хотите быть уверены, что она не будет перезаписана последующими вызовами gethostbyaddr.
Но вам действительно нужно рассмотреть возможность использования getaddrinfo, поскольку gethostbyaddr устарело.С getaddrinfo вы не будете задавать этот вопрос, потому что вам нужно будет выделить память для результата самостоятельно.
getaddrinfo
Нет, вы можете использовать указатель напрямую.
(Подумайте об этом: если память была недоступна или небезопасна для доступа, вы не сможете ее скопировать; и наоборот, если вы сможете скопировать ее, вы также можете использовать ее на месте).