2011-11-27 16 views
15

पर प्रतिलिपि कैसे करें एक पूर्णांक सरणी को डुप्लिकेट करने का सबसे अच्छा तरीका क्या है? मुझे पता है memcpy() ऐसा करने का एक तरीका है। क्या strdup() जैसे कोई फ़ंक्शन है?एक पूर्णांक सरणी को अन्य

+0

एक सरल 'फॉर लूप'? – Shahbaz

+1

'strdup' एक शून्य टर्मिनेटर पर निर्भर करता है, जो int arrays नहीं है। 'Memcpy' के साथ क्या गलत है? –

+0

हां जो करेगा। मैं जानना चाहता था कि क्या मैं इसे एक तरह से कर सकता हूं जैसे स्ट्रिंग() के तारों के लिए यह होता है। – FourOfAKind

उत्तर

23

नहीं है, और strdup मानक में नहीं है, या तो। आप निश्चित रूप से सिर्फ लिख सकते हैं अपनी खुद की:

int * intdup(int const * src, size_t len) 
{ 
    int * p = malloc(len * sizeof(int)); 
    memcpy(p, src, len * sizeof(int)); 
    return p; 
} 
+5

मैं जांचता हूं कि क्या मॉलोक वापस लौटा है;) – Beginner

+9

@RomanB .: पाठक के लिए व्यायाम! :-) –

+0

निश्चित रूप से मैं करूँगा। :) – FourOfAKind

0

यह काम कर सकता था अगर ठीक से इस्तेमाल किया:

#define arrayDup(DST,SRC,LEN) \ 
      { size_t TMPSZ = sizeof(*(SRC)) * (LEN); \ 
       if (((DST) = malloc(TMPSZ)) != NULL) \ 
       memcpy((DST), (SRC), TMPSZ); } 

तो फिर तुम कर सकते हैं:

double dsrc[4] = { 1.1, 2.2, 3.3, 4.4 }; 
int *isrc = malloc(3*sizeof(int)); 
char *cdest; 
int *idest; 
double *ddest; 
isrc[0] = 2; isrc[1] = 4; isrc[2] = 6; 

arrayDup(cdest,"Hello",6); /* duplicate a string literal */ 
arrayDup(idest,isrc,3); /* duplicate a malloc'ed array */ 
arrayDup(ddest,dsrc,4); /* duplicate a regular array */ 

चेतावनियां हैं:

  • SRC और DST मैक्रो मापदंडों मूल्यांकन किया जाता है और अधिक से अधिक एक बार
  • सूचक/सरणी के प्रकार SRC के रूप में पारित स्रोत सरणी से मेल खाना चाहिए (कोई void * जब तक सही प्रकार पर डाली) दूसरी ओर

, यह काम करता है कि स्रोत सरणी malloc() एड थी या नहीं, और किसी भी प्रकार के लिए।

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