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

我不想通过声明任何临时变量来做到这一点。该程序给出了分段错误。如何将uint32_t转换为struct in_addr?

struct in_addr { 
    uint32_t s_addr; 
}; 

回答

9

您正在将int转换为指针。也许你想这样做:

*(struct in_addr *)&ip 

但结果是实现定义(一开始,有endianness考虑因素)。

+0

我知道我在做一些愚蠢的事 – Bruce 2012-04-01 01:17:45

+0

我怎么能在同一行做htonl? – Bruce 2012-04-01 01:21:17

+0

结果是UNdefined的实现。它给出了一个警告:错误:解引用指针'ip'确实打破了严格别名规则 – jrwren 2013-11-07 19:16:15

相关问题