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

+0

मैं एक ही पंक्ति में htonl कैसे कर सकता हूं? – Bruce

+0

परिणाम कार्यान्वयन संयुक्त राष्ट्र है। यह एक चेतावनी देता है: त्रुटि: dereferencing सूचक 'आईपी' सख्त-एलियासिंग नियम तोड़ता है – jrwren

संबंधित मुद्दे