2

C を使用してプログラミングを始めたばかりです。これは単純なプログラムのはずですが、セグメンテーション違反が発生しています。よろしくお願いします

よろしく、

ファン

#include <string.h>

#include <stdio.h>
#include <stdlib.h>
#include<errno.h>
#include<netdb.h>
#include<sys/socket.h>
#include<netinet/in.h>


int main(int argc, char **argv)
{

  struct hostent *hp;
  struct in_addr **addr_list; 

  if ((hp = gethostbyname("www.yahoo.ca")) == NULL)
  {
    printf("gethostbyname() failed\n");
  }
  else
  {
    printf("Official name = %s\n", hp->h_name);

    addr_list = (struct in_addr **)hp->h_addr_list;

    unsigned int i = 0;
    while (addr_list[i] != NULL)
    {
      printf("%s\n",inet_ntoa(*((struct in_addr *)hp->h_addr)));
      i++;

    }
  }
}

プログラムの呼び出し方法は次のとおりです。

administrator@ubuntu:~/Documents$ ./a.out
Official name = any-rc.a01.yahoodns.net
Segmentation fault (core dumped)
administrator@ubuntu:~/Documents$ 
4

1 に答える 1

3

hp->h_addrおそらくあなたが望む代わりに:

printf("%s\n", inet_ntoa(*addr_list[i]));

補足として、gethostbynameは時代遅れです: を使用する必要がありますgetaddrinfo。お気づきのように、標準の新しいバージョンではgethostbyname.

于 2013-03-27T22:28:58.123 に答える