2012-04-01 9 views
6
#include <stdio.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 

int main() 
{ 
uint32_t ip = 0; 
printf("%s\n",inet_ntoa(*(struct in_addr *)ip)); 
return 0; 
} 

Nie chcę tego robić, deklarując dowolną zmienną tymczasową. Ten program daje błąd segmentacji.Jak przekonwertować uint32_t na struct in_addr?

struct in_addr { 
    uint32_t s_addr; 
}; 

Odpowiedz

9

Oddalasz int do wskaźnika. Może chcesz to:

*(struct in_addr *)&ip 

Ale wynik jest realizacja zdefiniowane (na początku, nie jesteśmy rozważania bajt).

+0

Wiedziałem, że robię coś głupiego – Bruce

+0

Jak mogę zrobić htonl w tej samej linii? – Bruce

+0

Wynikiem jest implementacja nieokreślona. Daje ostrzeżenie: błąd: wskaźnik deinterferencji 'ip' łamie zasady ścisłego wygładzania – jrwren

Powiązane problemy