2013-10-18 2 views
8

में memcpy का उपयोग करके मैं memcpy फ़ंक्शन के पैरामीटर पर थोड़ा उलझन में हूं। अगर मैंसी ++

int* arr = new int[5]; 

int* newarr = new int[6]; 

है और मैं, newarrmemcopy का उपयोग करते हुए arr में तत्वों की प्रतिलिपि करने के

memcpy(parameter, parameter, parameter) 

मैं यह करने के लिए कैसे करना चाहते हैं?

+0

क्या प्रलेखन आप memcpy के लिए क्या है? –

उत्तर

20

तो आदेश memcpy(destination, source, number_of_bytes) है।

इसलिए, आप

memcpy(newarr, arr, 5 * sizeof *arr); 
/* sizeof *arr == sizeof arr[0] == sizeof (int) */ 

साथ या

memcpy(newarr+1, arr, 5 * sizeof *arr); 

साथ अंत में newarr की शुरुआत में पुराने डेटा जगह कर सकते हैं क्योंकि आप arr और newarr, सूचक अंकगणित के डेटा प्रकार जानते हैं काम करता है। लेकिन memcpy के अंदर यह प्रकार नहीं जानता है, इसलिए इसे बाइट्स की संख्या जानने की जरूरत है।

एक और विकल्प std::copy या std::copy_n है।

std::copy_n(arr, 5, newarr); 

int तरह मौलिक प्रकार के लिए, बिटवाइज़ memcpy द्वारा किया प्रतिलिपि ठीक काम करेंगे। वास्तविक वर्ग के उदाहरणों के लिए, आपको std::copy (या copy_n) का उपयोग करने की आवश्यकता है ताकि कक्षा के अनुकूलित असाइनमेंट ऑपरेटर का उपयोग किया जा सके।

+0

@refp: एक टिप्पणी जोड़ना ठीक था, लेकिन कोड को जटिल करने की कोई आवश्यकता नहीं थी। –

+0

सुनिश्चित करें कि 'sizeof' के साथ संयोजन में ब्रांड्स आपके पोस्ट में एक स्टाइलिस्ट संशोधन हो सकता है, लेकिन मुझे यकीन है कि यह इसे अधिक जटिल बनाने की विधि नहीं माना जाएगा। सर्वसम्मति प्रोग्रामिंग में महत्वपूर्ण है (विशेष रूप से जब नौसिखियों से निपटना आसान होता है (उनके लिए) 'आकार' के एक "रूप" से निपटने के लिए (मेरे अजीब शब्द का बहाना))। –

+0

लेकिन निश्चित रूप से 'sizeof' –

-6
memcpy(*newarr, *arr, sizeof(arr)); 
+3

आपको अव्यवस्था की आवश्यकता नहीं है। यह गलत है। क्या आप कुछ विवरण जोड़ सकते हैं क्यों '*' आवश्यक है? –

1
memcpy(dest,src,size) 
dest -to which variable 
src - from which variable 
size - size of src varible 

int* arr = new int[5]; //source 
int* newarr = new int[6]; // destination 

for(int i = 0;i<5;i++) {arr[i] = i * 3;printf(" %d ",arr[i]);} 
memcpy(newarr,arr,sizeof(int)* 5); 
for(int i = 0;i<5;i++) printf("%d",newarr[i]); 
+5

कृपया एक स्पष्टीकरण जोड़ने पर विचार करें। – OhBeWise

+2

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, _why_ और/या _how_ के बारे में अतिरिक्त संदर्भ प्रदान करने के लिए यह कोड प्रश्न का उत्तर इसके दीर्घकालिक मान में काफी सुधार करेगा। कुछ स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें। –