#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
int main(int argc, char** argv)
{
char *ptr, **pptr;
char str[100];
struct hostent *hptr;
int i=0;
while(--argc>0)
{
ptr=*(++argv);
if((hptr=gethostbyname(ptr))==NULL)
{
printf("gethostbyname() error for host: %s: %s", ptr, hstrerror(h_errno));
exit(1);
continue;
}
printf("official hostanme: %s \n", hptr->h_name);
for(pptr=hptr->h_aliases; *pptr!=NULL; pptr++)
printf("\talias: %s \n", *pptr);
switch(hptr->h_addrtype)
{
case AF_INET:
pptr=hptr->h_addr_list;
for(; *pptr!=NULL; pptr++)
printf("\taddress: %s \n", inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
break;
default:
printf("unknown addres type");
break;
}
}
exit(0);
}
Neden bu kod bana bölümleme hatası veriyor?gethostbyname() bölümleme hatası
Resmi adı çıkana kadar, sorun değil. Ama bundan sonra, bana bir hata veriyor.
Bu kaynak kodunda sözdizimsel bir sorun olmadığını düşünüyorum. O zaman sorun nedir?
[POSIX.1-2008, gethostbyname(), gethostbyaddr() ve h_errno teknik özelliklerini kaldırır, getaddrinfo (3) ve getnameinfo (3) kullanımını önerir.] (Http://linux.die.net/man/3/gethostbyname) – pmg
Siz * h_aliases'ın işaret ettiği 'char * 'işaretlerinden herhangi birinin NULL olmadığını kontrol edin. Ancak h_aliases'ın kendisi de NULL olabilir (yani başka takma adlar yoktur) - Ve siz * bunu kontrol edemezsiniz. – tofro
Programın çöktüğü kodun tam satırını bulmak için kodu bir hata ayıklayıcının içinde çalıştırmak ve daha sonra neler olup bittiğini öğrenmek için tüm değişkenleri incelemek istiyorsunuz. – alk