2012-04-01 8 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; 
} 

No deseo hacer esto declarando cualquier variable temporal. Este programa proporciona una falla de segmentación.Cómo convertir uint32_t a struct in_addr?

struct in_addr { 
    uint32_t s_addr; 
}; 

Respuesta

9

Has lanzado un int a un puntero. Tal vez usted quiere esto:

*(struct in_addr *)&ip 

pero el resultado es definido implementación (para empezar, hay consideraciones endianness).

+0

Sabía que estaba haciendo algo estúpido – Bruce

+0

¿Cómo puedo hacer htonl en la misma línea? – Bruce

+0

El resultado es una implementación no definida. Da una advertencia: error: desreferenciando el puntero 'ip' rompe las reglas de alias estrictos – jrwren