-1

gethostbynameFedora 32 ビットでは正常に動作しますが、64 ビット環境では失敗し、セグメンテーション エラーが発生しますか? このようなシナリオでは、何が問題で、どうすれば解決できるのでしょうか?

#include <stdio.h>  
#include <string.h>  
#include <netdb.h>  
#include <netinet/in.h>  

struct hostent *he;  
struct in_addr a; 

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

    if (argc != 2)  {  
        fprintf(stderr, "usage: %s hostname\n", argv[0]);  
        return 1;  
    }  

    he = gethostbyname (argv[1]);  
    if (he)  {  
        printf("name :- %s\n", he->h_name);  
        while (*he->h_aliases)  
            printf("alias:- %s\n", *he->h_aliases++);  
        while (*he->h_addr_list)  {  
            bcopy(*he->h_addr_list++, (char *) &a, sizeof(a));  
            printf("address:- %s\n", inet_ntoa(a));  
        }  
    }  
    else  
        herror(argv[0]);  
    return 0;  
}
4

1 に答える 1

2

正しいインクルードがありません:

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

正しいインクルードがない場合inet_ntoa、 の戻り値の型があると見なされますintintx86と同じサイズなのでchar*問題ありません。これは x86_64 には当てはまらないため、その文字列を読み取るとprintfエラーが発生します。

于 2012-07-19T13:40:58.203 に答える