2012-04-01 72 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

相關問題