2015-01-20 1 views
0

프로젝트 nodogsplash에 추가 기능을 추가하려고합니다.구조 유형 내부의 가변 크기 유형은 무엇입니까

struct addrlist_t {              
     struct in_addr h_addr; 
     struct addrlist_t *next;          
} *addrhead = NULL, *cur = NULL; 

내가 x86_64의에서 sizeof(struct addrlist_t) 반환 8 바이트를하고 있어요, 나는 16 바이트해야 여기에 생각합니다. 이상한 것은 &cur->h_addr&cur->next의 포인터가 동일합니다. 그런 다음 다른 프로그램에서 struct addrlist_t을 확인하면 정상적으로 작동합니다.

GDB는 말 : 시도는 구조 유형의 내부에 나타나는 가변 크기의 종류를 해결하기 위해

이 사람이 나에게 어떤 도움을 줄 수 있습니다.

은 내가 오류를 발견 gcc -E

7812 struct hostent *he;                
7813 struct addrlist_t {                
7814 struct in_addr h_addr_list[0];             
7815 struct addrlist_t *next;              
7816 } *addrhead = ((void *)0), *cur = ((void *)0);         
7817 struct addrlist_t **ppre = &addrhead;  
+3

컴파일 타임에 경고가 표시됩니까? '-Wall'로 컴파일하고 있는지 확인하십시오. 'struct in_addr'의 정의에 문제가있는 것처럼 보입니다. –

+5

동작을 나타내는 [SSCCE] (http://sscce.org/)를 포함시킬 수 있습니까? – NPE

+0

아마도'struct'는 여러분이 말하는 것과 다르며 유연한 배열 멤버를 가지고 있습니다 (https://en.wikipedia.org/wiki/Flexible_array_member) –

답변

1

확인합니다. 내가 gethostbyname 사용

#include <netdb.h>이 포함

 struct hostent { 
      char *h_name;   /* official name of host */ 
      char **h_aliases;   /* alias list */ 
      int h_addrtype;  /* host address type */ 
      int h_length;   /* length of address */ 
      char **h_addr_list;  /* list of addresses */ 
     } 
     #define h_addr h_addr_list[0] /* for backward compatibility */ 

그리고 h_addr 오류 정의입니다.

+0

[gethostbyname (3)] (http://man7.org/linux/ man-pages/man3/gethostbyname.3.html)은 * 사용되지 않습니다 * ('man' * 페이지 참조). ** [getaddrinfo (3)] (http://man7.org/linux/man-pages/man3/getaddrinfo.3.html) **을 사용해야합니다. ** –