inet_ntoa
уже возвращает char *
- просто он указывает на статический буфер, который будет перезаписан при последующих вызовах. Если вы хотите сохранить указанную строку, вы можете просто использовать strdup()
:
char *ip;
/* ... */
ip = strdup(inet_ntoa(inaddrr(ifr_addr.sa_data)));
Вы должны позвонить free()
на ip
, когда закончите.