- Проверить, переданы ли два параметра в качестве параметров командной строки
- Проверьте, вернул ли
gethostbyname
действительный указатель, и сообщите о проблеме при необходимости
.
int main(int argc,char *argv[])
{
struct hostent *ptr;
/* Check if there is enough argument */
if (argc != 2)
{
printf ("\nusage: %s <host_name>\n", argv[0]);
exit (1);
}
/* fill up hostent structure */
ptr = gethostbyname(argv[1]);
/* Check if we have a valid one */
if (ptr != NULL)
{
printf ("\n%s\n", ptr->h_name);
}
else
{
/* Print the error */
printf ("\n%s", hstrerror (h_errno));
}
printf ("\n");
return 0;
}
Это работает здесь, в моей системе с gcc file.c -Wall -Wextra
и ./a.out
говорит
usage: ./a.out <host_name>
А ./a.out yahoo.com
рассказывает
yahoo.com
EDIT1:
Руководства говорят ...
Функции gethostbyname * () и gethostbyaddr * () устарели.
Приложения должны использовать вместо этого getaddrinfo (3) и getnameinfo (3).