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; 
} 

私は一時変数を宣言することでこれを行いたくありません。このプログラムは、セグメンテーションフォールトを与えます。uint32_tをstruct in_addrに変換するには?

struct in_addr { 
    uint32_t s_addr; 
}; 

答えて

9

intをポインタにキャストしています。おそらくこれが欲しい:

*(struct in_addr *)&ip 

結果は実装定義です(最初はエンディアンに関する考慮事項があります)。

+0

私は何かばかげたことを知っていた – Bruce

+0

私は同じ行にhtonlをするにはどうすればいいですか? – Bruce

+0

結果は実装が定義されていません。それは警告を出します:エラー:逆参照ポインタ 'ip'は厳密なエイリアシング規則を破りません – jrwren

関連する問題