c++ - How does size work with memcpy? -


मेरा प्रश्न निम्नलिखित कोड से सुरक्षित है:

  #define ARRAY_SIZE 10 std :: सरणी & lt; BYTE, ARRAY_SIZE & gt; myArray; Char * string = "this_sentence_is_longer_than_10_bytes" मेम्क्पी (& amp; myArray, स्ट्रिंग, ARRAY_SIZE);  

परिणाम: myArray को [0- 9] के साथ "this_sente"

से भरा है सुरक्षित होने के नाते, मुझे यह जानने की आवश्यकता है कि बाकी 'स्ट्रिंग' के साथ क्या हो रहा है क्या इसे पूरी तरह से दिए गए आकार की वजह से अनदेखा किया जा रहा है या क्या इसे सरणी के अंत में फेंक दिया जा रहा है?

संपादित करें: अब

  #define ARRAY_SIZE 10 std: : सरणी & lt; BYTE, ARRAY_SIZE & gt; myArray; Char * string = "this_sentence_is_longer_than_10_bytes" अगर (स्ट्रेलन (स्ट्रिंग) & lt; ARRAY_SIZE) {BYTE स्पष्टअरेरे [ARRAY_SIZE] = {0}; Memcpy (& amp; myArray, साफ़अरे, ARRAY_SIZE); Memcpy (& amp; myArray, स्ट्रिंग, स्ट्रेलन (स्ट्रिंग)); } और {memcpy (& amp; myArray, स्ट्रिंग, ARRAY_SIZE); }  

यह अब एसडीडी को बाहर कर देता है: शून्य के साथ सरणी यदि स्ट्रिंग 10 अक्षरों से कम है, अन्यथा यह प्रारंभिक विधि का उपयोग करता है।

< Div class = "post-text" itemprop = "text">

बाकी स्ट्रिंग स्थिर हो जाता है, जैसे कि यह वहां नहीं है। memcpy बंद हो जाता है जैसे ही यह आकार बाइट्स तक पहुंचता है।

ध्यान दें कि हालांकि यह स्मृति ब्लॉक को पास करना सुरक्षित है जो आकार से बड़ा है से memcpy , एक ब्लॉक से गुजर रहा है जो कम ट्रिगर होता है अनिर्धारित व्यवहार उदाहरण के लिए, अगर आप स्ट्रिंग पास करते हैं, जो नौ अक्षर से कम है, तो memcpy स्ट्रिंग के अंत में अमान्य वर्णों को myArray में कॉपी कर देगा। < / P>


Comments

Popular posts from this blog

java - org.apache.http.ProtocolException: Target host is not specified -

java - Gradle dependencies: compile project by relative path -

ruby on rails - Object doesn't support #inspect when used with .include -