मेमोसेट क्यों करें कोई निश्चित गाइड है जो कहता है कि हमें किसी विशेष कारण के लिए sockaddr_in संरचना को शून्य में प्रारंभ करना है?क्यों sockaddr_in को 0
struct sockaddr_in foo;
memset(&foo, 0, sizeof(foo));
foo.sin_port = htons(1025);
foo.sin_family = AF_INET;
inet_pton(AF_INET, "10.0.0.1", &foo.sin_addr);
मैं समझता हूँ कि कुछ सूत्रों का कहना है कि कि char sin_zero[8]
सदस्य गद्दी के लिए नहीं है और:
// IPv4 AF_INET sockets:
struct sockaddr_in {
short sin_family; // e.g. AF_INET, AF_INET6
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};
जब भी मैं वास्तविक कोड या उदाहरण या किताबों में देखा यह हमेशा कोड संरचना निम्न के समान है शून्य पर सेट किया जाना चाहिए, लेकिन बाकी को शून्य क्यों करना चाहिए। विशेष रूप से जब वे घोषणा के अगले कुछ पंक्तियों के भीतर ज्यादातर मामलों में शुरू होते हैं। Sin_zero सदस्य के बारे में भी beej प्रोग्रामिंग गाइड said it is not mandatory to zero them out anymore। मैंने एक स्पष्टीकरण की खोज की है लेकिन बिंदु के लिए कुछ भी नहीं हुआ है। यह stack overflow question में प्रारंभिकरण पर कुछ अलग-अलग सुझाव हैं लेकिन यह नहीं समझाता कि शून्यिंग आवश्यक क्यों है।
क्या यह एक विरासत अभ्यास है या कुछ वास्तविक कारण हैं जो मुझे याद आ रही है? किसी भी संदर्भ की सराहना की है।
यह सुनिश्चित करता है कि आप कचरे के मूल्यों पर निर्भर कोड के साथ समाप्त नहीं होते हैं। इस तरह का कोड हेज़ेनबग और अन्य बग उत्पन्न कर सकता है जो डीबग करना मुश्किल होता है। –
या सिर्फ 'struct sockaddr_in foo = {AF_INET, htons (1025)}; '- यह छोटा है, और शेष शेष सदस्यों को शून्य करता है। – MSalters