c++ - Using strcpy throws "stack smashing detected" error -


मेरे पास दो प्रकार के struct s, struct msg और < कोड> स्ट्रेट pkt । मेरा कार्य एक struct pkt का उपयोग करके एक कोड के रूप में पारित किया गया है।

  struct msg {char डेटा [20]; }; संरचना pkt {int seqnum; इंट आक्नम; इंट चेकसम; चार पेलोड [20]; };  

जबकि

  शून्य A_output (संरचना संदेश संदेश) {// विफल रहता है ... struct pkt snd_pkt; Strcpy (snd_pkt.payload, message.data); ...}  

विफल,

  शून्य A_output (संरचना संदेश संदेश) {// सफल होता है ... struct pkt snd_pkt; Memcpy (& amp; snd_pkt.payload, & amp; संदेश, sizeof (struct msg)); ...}  

सफल होता है।

मुझे समझ में नहीं आ रहा है कि अगर मैं वर्ण [20] को चार [चार] प्रतिलिपि बना रहा हूं, और Strcpy , यह ठीक नहीं होना चाहिए? यह स्टैक स्मैशिंग त्रुटि क्यों फेंक रहा है?

क्यों काम के उत्तर में, यह struct msg > की स्मृति को कॉपी करता है char [20] फ़ील्ड में struct pkt , और तीसरे तर्क क्यों sizeof (struct msg) होना चाहिए, strlen (message.data) + 1?

मुझे समझ में नहीं आ रहा है, अगर मैं वर्ण [char] को प्रतिलिपि बना रहा हूँ [20], और स्ट्रकपी का इस्तेमाल किया है यह ठीक नहीं होना चाहिए?

यह ठीक होगा कि संरचना के डेटा सदस्य डेटा msg बंद शून्य है, अगर यह एक स्ट्रिंग है ऐसा लगता है कि त्रुटि का कारण यह है कि इसमें स्ट्रिंग नहीं है इस कथन के लिए

  memcpy (& amp; snd_pkt.payload, & amp; संदेश, sizeof (struct msg));  

फिर सामान्य मामले में यह व्यवहार अपरिभाषित है क्योंकि संरचना संरेखण के कारण संरचना के आकार 20 बाइट्स से अधिक हो सकते हैं उदाहरण के लिए जब sizeof (int 8 के बराबर है।


Comments

Popular posts from this blog

c# - XML serialize base class without knowing derived class -

c# - UnhandledExceptionMode.ThrowException for AppDomain.UnhandledException -

udp - The relationship between MTU and size of skb in xmit function -