- 1 1. परिचय
- 2 2. एरेको मूल अवधारणा
- 3 3. एरेको प्रतिलिपि गर्ने तरिका
- 4 4. स्ट्रिंग (char एरे) को प्रतिलिपि
- 5 5. एरे प्रतिलिपि गर्दा ध्यान दिनुपर्ने बुँदाहरू
- 6 6. FAQ(प्रायः सोधिने प्रश्नहरू)
- 6.1 Q1. memcpy र memmoveको भिन्नता के हो?
- 6.2 Q2. strcpy र strncpyको भिन्नता र प्रयोगको विभाजन के हो?
- 6.3 Q3. एरेलाई फलनको आर्गुमेन्टको रूपमा पास गर्दा ध्यान दिनुपर्ने बुँदाहरू छन्?
- 6.4 Q4. memcpy द्वारा संरचनाको एरे प्रतिलिपि गर्दा समस्या छैन?
- 6.5 Q5. एरेलाई एकैपटक प्रतिलिपि गर्न चाहन्छु तर प्रत्येक पटक for लूप लेख झन्झट हुन्छ। के यो साझा फलनमा बनाइँन सक्छ?
- 7 7. सारांश
1. परिचय
C भाषा मा “एरे प्रतिलिपि” को महत्व
C भाषा मा प्रोग्रामिङ गर्दा एरेको सामग्रीलाई अर्को एरेमा प्रतिलिपि गर्न चाहने जस्ता परिस्थितिहरूलाई बारम्बार भेट्न सकिन्छ। उदाहरणका लागि, डेटा ब्याकअप लिनु पर्दा वा अस्थायी प्रक्रियाको लागि अर्को चलमा मान राख्नुपर्दा आदि।
तर, C भाषा उच्च-स्तरीय भाषाहरूको तुलनामा मेमोरी अपरेसनको समर्थन कम छ, एरेको प्रतिलिपि पनि स्वचालित रूपमा गरिदैन त्यसैले, म्यानुअल रूपमा प्रतिलिपि प्रक्रिया लेख्न आवश्यक हुन्छ। साथै, यदि त्यो तरिका गलत भएमा “अनपेक्षित व्यवहार” वा “मेमोरी क्षति” जस्ता गम्भीर बगहरू उत्पन्न हुन सक्छ।
त्यसैले, सही प्रतिलिपि विधि बुझ्न, सुरक्षित र प्रभावकारी रूपमा एरेहरूलाई ह्यान्डल गर्न C भाषा सिक्ने क्रममा अत्यन्त महत्वपूर्ण सीपहरूमध्ये एक हो।
एरे प्रतिलिपि मा झन्झट पाउने मानिसहरू धेरै छन्
वास्तवमा “C भाषा एरे प्रतिलिपि” जस्ता कुञ्जीशब्दले खोज्ने मानिसहरू धेरै छन्, जसले यसको माग उच्च छ भन्ने देखाउँछ।
memcpy
strcpy
for कथन
- प्वाइन्टर प्रयोग गरेर प्रतिलिपि कसरी लेख्ने?
यी प्रश्नहरूलाई उत्तर दिनका लागि, यस लेखमा C भाषा मा एरे प्रतिलिपिको आधारभूतदेखि उन्नत प्रयोगसम्म स्पष्ट रूपमा व्याख्या गर्नेछौं।
यस लेखमा सिक्न सकिने कुरा
यो पृष्ठ पढेर, तलका ज्ञानहरू प्राप्त गर्न सकिन्छ।
- C भाषामा एरेको मूलभूत अवधारणा
- एरेहरू प्रतिलिपि गर्ने धेरै तरिकाहरू र तिनीहरूका प्रत्येकको फाइदा・ध्यान दिनुपर्ने कुराहरू
- char सरणी कॉपी गर्दा टिप्स र जालहरू
- सामान्य प्रश्नहरूका लागि Q&A ढाँचामा व्याख्या
C भाषा शुरुआतीहरूका लागि पनि बुझ्न सजिलो बनाउने गरी, नमुना कोडसहित बिस्तारै व्याख्या गर्नेछौं। अर्को खण्डबाट, पहिले एरेको आधारभूत हेर्नुहोस्।
2. एरेको मूल अवधारणा
एरे भनेको के हो?
C Gengo माएरे(Array) भनेको、एकै डेटा प्रकारका तत्वहरूलाई क्रमशः भण्डारण गर्नको लागि चल हो। उदाहरणका लागि、5 जनाको अंकहरू भण्डारण गर्न、int
प्रकारको चललाई 5 वटा परिभाषित गर्ने सट्टा、एउटा एरेमा समेटेर प्रयोग गर्न सकिन्छ।
int scores[5];
यसरी परिभाषित गरिएको एरेमा、0番目から順にインデックスを指定してアクセスできます。
scores[0] = 80;
scores[1] = 75;
scores[2] = 90;
scores[3] = 60;
scores[4] = 85;
यहाँ scores[0]
~ scores[4]
का ५ वटा तत्वमा पूर्णांकहरू राखिएका छन्। इन्डेक्स ० बाट सुरु हुन्छ भन्ने कुरामा ध्यान दिनुहोस्।
एरेको प्रारम्भिकरण विधि
एरेलाई घोषणा गर्दा आरम्भिकरण गर्न पनि सकिन्छ। आरम्भिकरण भनेको、एरे बनाउँदाैसाथै मानहरू राख्नु हो।
int scores[5] = {80, 75, 90, 60, 85};
यसरी लेखेर、एरेका प्रत्येक तत्वमा क्रमशः मानहरू राखिन्छ।なお、एरेको आकारलाई छुट्याउन पनि सम्भव छ।
int scores[] = {80, 75, 90, 60, 85}; // तत्व संख्या स्वचालित रूपमा ५ मानिन्छ
उल्टो、要素数を明示しても値が足りない場合、残りの要素は自動的に 0
ले आरम्भिकरण हुन्छ।
int scores[5] = {80, 75}; // scores[2]~scores[4] 0 हुन्छ
एरेको मेमोरी संरचना बुझ्न
C Gengo मा、एरेका तत्वहरूमेमोरीमा क्रमशः राखिन्छगर्छ।यस विशेषताले、for
लूप वा पोइन्टर प्रयोग गरेर प्रभावकारी रूपमा सञ्चालन गर्न सकिन्छ।
उदाहरणका लागि तलको कोडले、एरेका सबै तत्वहरूलाई क्रमशः देखाइरहेको छ।
for (int i = 0; i < 5; i++) {
printf("%d
", scores[i]);
}
यसरी एरेको मूल संरचना बुझ्नाले、पछि उल्लेखित「कपी प्रक्रिया」にも大きく関係してきます।
3. एरेको प्रतिलिपि गर्ने तरिका
C भाषा मा、एरेलाई असाइनमेंट अपरेटर(=
)द्वारा एकै पटक प्रतिलिपि गर्न सकिँदैन।तलको जस्तै कोड कम्पाइल त्रुटि हुन्छ।
int a[5] = {1, 2, 3, 4, 5};
int b[5];
b = a; // त्रुटि:एरेहरू बीच असाइनमेंट असम्भव
त्यसैले、एरेलाई प्रतिलिपि गर्न, स्पष्ट रूपमा एक-एक तत्व प्रतिलिपि गर्ने विधि वा、मानक पुस्तकालय फंक्शन प्रयोग गर्ने विधि आवश्यक छ।यहाँ प्रतिनिधि तीनवटा विधिहरू प्रस्तुत गरिन्छ।
for लूप प्रयोग गरेर तत्व अनुसारको प्रतिलिपि
सबैभन्दा आधारभूत र सुरक्षित विधि हो、for
लूप प्रयोग गरेरएक-एक तत्व प्रतिलिपि गर्ने विधि हो।
#include
int main() {
int src[5] = {10, 20, 30, 40, 50};
int dest[5];
for (int i = 0; i < 5; i++) {
dest[i] = src[i];
}
// प्रतिलिपि परिणामको प्रदर्शन
for (int i = 0; i < 5; i++) {
printf("%d ", dest[i]);
}
return 0;
}
यो विधिको फाइदा भनेको、「एरेको आकार सजिलै बुझ्न र नियन्त्रण गर्न सकिने」 हो।सुरक्षा उच्च छ, र शुरुआतीहरूलाई पनि सिफारिस गर्न सकिन्छ।
memcpy
फंक्शन प्रयोग गरेर उच्च गति प्रतिलिपि
यदि एरेलाई अझ प्रभावकारी रूपमा प्रतिलिपि गर्न चाहनुहुन्छ भने, मानक पुस्तकालय मा समावेश गरिएको
memcpy
फंक्शन प्रयोग गर्ने विधि छ।
#include
#include
int main() {
int src[5] = {1, 2, 3, 4, 5};
int dest[5];
memcpy(dest, src, sizeof(src)); // src को बाइट संख्याको बराबर प्रतिलिपि
for (int i = 0; i < 5; i++) {
printf("%d ", dest[i]);
}
return 0;
}
memcpy
को प्रयोग गर्ने बुँदाहरू:
- पहिलो तर्क
- दोस्रो तर्क
- तीस्रो तर्क
ध्यान दिनु पर्ने बुँदाहरू:
- स्रोत र गन्तव्य एरेको आकार फरक भएमा हुन सक्ने सम्भावना हुन्छ, त्यसैले साइजलाई अवश्य जाँच गर्नुहोस्।
- यदि मेमोरी ओभरलैप हुन्छ भने प्रयोग गर्न सकिँदैन (अर्को खण्डमा व्याख्या गरिनेछ)।
memmove
सँगको भिन्नता र प्रयोग विभाजन
memcpy
सँग समान फंक्शन memmove
छ। दुवैको भिन्नता भनेको,「प्रतिलिपि स्रोत र गन्तव्य ओभरलैप हुँदा को व्यवहार」 हो।
memcpy
मेमोरी ओभरलैप नभएको अवस्थामा प्रयोग गरिन्छmemmove
ओभरलैप भएपनि सुरक्षित रूपमा प्रतिलिपि गर्न सकिन्छ
उदाहरण प्रयोग:
char str[] = "ABCDE";
// दोस्रो अक्षरदेखि पहिलो अक्षरबाट ओभरराइट प्रतिलिपि (ओभरलैप छ)
memmove(str + 1, str, 4);
str[5] = ' '; // null समाप्ति
printf("%s
", str); // आउटपुट:AABCD
विभाजनको मूल नियम:
प्रयोग स्थिति | सिफारिस गरिएको फङ्सन |
---|---|
स्मृति ओवरलैप हुँदैन | memcpy |
ओभरलैप हुन सक्छ | memmove |
एरे अपरेसनमा सामान्यतया memcpy
प्रयोग गरे पर्याप्त हुन्छ, तर स्ट्रिङ अपरेसन जस्ता केसहरूमा एरेको केही भाग सर्नु पर्ने अवस्थामा memmove
प्रयोग गर्नु पर्छ।

4. स्ट्रिंग (char एरे) को प्रतिलिपि
सी भाषामा, स्ट्रिङ्गchar
प्रकारको एरेको रूपमा ह्यान्डल गरिन्छ, संख्यात्मक एरेसँग केही फरक बुँदा ध्यान दिनु आवश्यक छ। स्ट्रिङ्ग प्रतिलिपिका लागि विशेष फङ्क्शन उपलब्ध छ, memcpy
जस्तै बाइनरी प्रतिलिपि भन्दा फरक, “समाप्ति क्यारेक्टरलाई समावेश गरी प्रतिलिपि गर्ने” भन्ने विशेषता छ।
strcpy
फङ्क्शनले स्ट्रिङ्गलाई प्रतिलिपि गर्ने
सी भाषाको मानक लाइब्रेरी मा समावेश गरिएको
strcpy
फङ्क्शनले, नल समाप्ति () सम्म स्ट्रिङ्गलाई प्रतिलिपि गर्ने सुविधा प्रदान गर्ने उपयोगी फङ्क्शन हो।
include #include int main() { char src[] = "Hello, world!"; char dest[50]; strcpy(dest, src); printf("प्रतिलिपि परिणाम:%s ", dest); return 0; }
यो कोडमा, src
को स्ट्रिङ्ग(समाप्ति सहित)लाई dest
मा प्रतिलिपि गरिएको छ।
ध्यान दिनु पर्ने बुँदा:
dest
बफर ओभरफ्लो- प्रतिलिपि गरिने अक्षरहरूको संख्या को लम्बाइमा निर्भर गर्दछ。
strncpy
द्वारा सुरक्षित रूपमा प्रतिलिपि गर्ने
strcpy
को सट्टा प्रयोग गर्न सकिने फङ्क्शन strncpy
हो। यो “निर्दिष्ट अक्षरसंख्याको मात्र प्रतिलिपि गर्ने” भन्ने विशिष्टता भएकोले, सुरक्षा उच्च हुन्छ।
include #include int main() { char src[] = "C language"; char dest[10]; strncpy(dest, src, sizeof(dest) - 1); // अन्तिम 1 बाइटलाई प्रयोगको लागि राख्ने dest[9] = ' '; // सावधानीका लागि समाप्ति क्यारेक्टरलाई स्पष्ट गर्ने printf("प्रतिलिपि परिणाम:%s ", dest); return 0; }
strncpy
को विशेषताहरू:
- निर्दिष्ट लम्बाइको मात्र प्रतिलिपि गर्नुहोस्।
- यदि स्रोत छोटो छ भने, बाँकी भाग द्वारा भरेको हुन्छ (परिस्थितिमा निर्भर)।
- टर्मिनल क्यारेक्टर स्वचालित रूपमा थपिने ग्यारेन्टी छैन, त्यसैले आफैँ स्पष्ट रूपमा निर्दिष्ट गर्नु सुरक्षित हुन्छ।
जापानी (मल्टिबाइट स्ट्रिङ्ग) लाई ह्यान्डल गर्दा ध्यान दिनु पर्ने बुँदा
जापानी आदि मल्टिबाइट क्यारेक्टर(UTF-8、Shift-JIS आदि)लाई ह्यान्डल गर्दा, strcpy
वा strncpy
द्वारा बिचको बाइट काटिएमा, क्यारेक्टर बिग्रनु वा प्रदर्शन त्रुटिको कारण बन्छ।
उदाहरणका लागि「こんにちは」लाई 3 बाइट मात्र प्रतिलिपि गरेमा, अधूरो अवस्था हुन सक्छ। यस्तो अवस्थामा, क्यारेक्टर इकाइमा ह्यान्डल गर्न सक्ने लाइब्रेरी वा वाइड क्यारेक्टर(wchar_t
)को प्रयोग विचार गर्नुपर्छ।
स्ट्रिङ्ग प्रतिलिपिको सर्वोत्तम अभ्यासहरूको सारांश
फङ्सन नाम | विशेषता | ध्यान दिनु पर्ने बुँदाहरू |
---|---|---|
strcpy | अन्तिम पाठसम्म प्रतिलिपि गर्नुहोस् | बफर आकारको जाँच अनिवार्य |
strncpy | निर्दिष्ट लम्बाइ मात्र प्रतिलिपि गर्न सकिन्छ | टर्मिनल अक्षरहरू ग्यारेन्टी गरिने छैनन् |
memcpy | कुनै पनि बाइट अनुक्रमलाई प्रतिलिपि गर्न सकिन्छ | बाइनरी प्रतिलिपि। स्ट्रिङ्-उन्मुख छैन। |
strdup | प्रतिलिपि गरिएको स्ट्रिङको नयाँ मेमोरी आरक्षित गर्नु (गैर-मानक) | उपयोग पछि आवश्यक छ |
5. एरे प्रतिलिपि गर्दा ध्यान दिनुपर्ने बुँदाहरू
एरेको प्रतिलिपि एक नजरमा सरल प्रक्रिया जस्तो देखिन सक्छ, यदि सही रूपमा ह्यान्डल नगरेमा गम्भीर बग वा सुरक्षा त्रुटि उत्पन्न हुने जोखिम हुन्छ। यस भागमा, C भाषा मा एरे प्रतिलिपि गर्दा विशेष ध्यान दिनुपर्ने बुँदाहरूलाई व्याख्या गर्नेछौं।
बफर ओभरफ्लोमा ध्यान दिनुहोस्
सबैभन्दा धेरै देखिने गल्ती हो, प्रतिलिपि गन्तव्य एरेको आकार भन्दा बढी डेटा लेखिदिनु “बफर ओभरफ्लो” हो।
उदाहरण: जोखिमपूर्ण प्रतिलिपि प्रक्रिया
char src[] = "This is a long string.";
char dest[10];
strcpy(dest, src); // destको आकार भन्दा बढी प्रतिलिपि → मेमोरी क्षतिको सम्भावना
यस्ता कोडले, अवैध मेमोरी क्षेत्रमा पहुँच गराउँछ जसले कार्यक्रम क्र्यास हुन सक्छ वा कमजोरीको कारण बन्छ।
उपायहरू:
strncpy
memcpy
सधैं साइज सीमित गर्नुहोस्- टर्मिनल क्यारेक्टरलाई म्यानुअली थप्न नबिर्सनुहोस्।
- एरेको आकारलाई स्थिरांक वा म्याक्रोद्वारा व्यवस्थापन गर्नुहोस्।
प्रतिलिपि लक्ष्यको आकारलाई ठीकसँग बुझ्नुहोस्
memcpy
वा memmove
प्रयोग गरेर प्रतिलिपि गर्दा, तत्व संख्या होइन, “बाइट सङ्ख्या” द्वारा निर्दिष्ट गर्न आवश्यक छ।
सुरक्षित आकार निर्दिष्ट गर्ने उदाहरण:
int src[5] = {1, 2, 3, 4, 5};
int dest[5];
memcpy(dest, src, sizeof(src)); // srcको सम्पूर्ण बाइट सङ्ख्या निर्दिष्ट
यसरी sizeof(src)
प्रयोग गर्दा, एरेको सम्पूर्ण आकार (बाइट सङ्ख्या) स्वचालित रूपमा प्राप्त हुन्छ, जसले सुरक्षित बनाउँछ।
तर, जब एरेलाई फलामको आर्गुमेन्टको रूपमा लिइन्छ, sizeof
अपेक्षित रूपमा काम गर्दैन (एरे पोइन्टरमा रूपान्तरण हुन्छ) त्यसैले ध्यान दिनु आवश्यक छ।
पोइन्टर सञ्चालन गर्दा ध्यान दिनुपर्ने बुँदाहरू
C भाषामा, एरेलाई प्रायः पोइन्टरको रूपमा ह्यान्डल गरिन्छ, गलत पोइन्टर सञ्चालनले मेमोरीलाई नष्ट गर्ने सम्भावना हुन्छ।
प्रायः देखिने गल्तीको उदाहरण:
int *src = NULL;
int dest[5];
memcpy(dest, src, sizeof(dest)); // NULL पोइन्टरलाई प्रतिलिपि स्रोतको रूपमा निर्दिष्ट → क्र्यास
बुँदा:
- प्वाइन्टर वैध ठेगाना सूचि गर्दैछ कि छैन, गर्नुहोस्।
- मेमोरी आवंटन( आदि)पछि प्रतिलिपि गर्दा、 जाँच गर्नुहोस्。
प्रतिलिपि स्रोत र गन्तव्य क्षेत्र ओभरलैप हुँदा उपाय
पहिले व्याख्या गरेजस्तै, memcpy
ले ओभरलैप भएको मेमोरी क्षेत्रको प्रतिलिपि समर्थन गर्दैन। एरेको केही भागलाई अर्को स्थानमा प्रतिलिपि गर्ने अवस्थामा, memmove
प्रयोग गर्नु नै नियम हो।
char buffer[100] = "example";
// केही स्ट्रिङलाई आफैभित्र सर्नु
memmove(buffer + 2, buffer, 4); // सुरक्षित रूपमा ओभरलैप प्रतिलिपि
एरे आकारको परिभाषा र व्यवस्थापन
सुरक्षित प्रतिलिपि प्रक्रिया गर्न, एरे आकारको एकीकृत व्यवस्थापन प्रभावकारी हुन्छ। तलको जस्तै म्याक्रोमा परिभाषित गरेर, कोडको मर्मतयोग्यता र सुरक्षा सुधारिन्छ।
#define ARRAY_SIZE 10
int arr1[ARRAY_SIZE];
int arr2[ARRAY_SIZE];
memcpy(arr2, arr1, sizeof(arr1));
सुरक्षित एरे प्रतिलिपिको सारांश
- प्रतिलिपि गर्दा
strncpy
memmove
- स्रोत र गन्तव्यको ।
- प्वाइन्टर सञ्चालनमा विशेष ध्यान दिनुहोस्
6. FAQ(प्रायः सोधिने प्रश्नहरू)
C भाषा मा एरेको प्रतिलिपि सम्बन्धी, शुरुआतीदेखि मध्यवर्ती स्तरसम्मकाप्रायः प्रश्न हुने बुँदाहरूलाई Q&A ढाँचामा व्याख गर्नेौं। स भता र विशिष्टताहरूलाई सही रूपमा बुझेर, बगको रोकथाम र कोडको गुणस्तर सुधारमा पनि योगदान पुर्याउँछ।
Q1. memcpy
र memmove
को भिन्नता के हो?
A. मेमोरी क्षेत्र ओभरलैप भएको अवस्थामा, कार्यको सुरक्षा भिन्न हुन्छ।
तुलनात्मक बुँदाहरू | memcpy | memmove |
---|---|---|
ओभरलैपसँग सम्बन्धित सुरक्षा | ×(अनिश्चित व्यवहारको सम्भावना हुन्छ) | ◎(आन्तरिक रूपमा अस्थायी बफर प्रयोग गरेर प्रक्रिया) |
प्रक्रिया गति | उच्च गति (कम ओवरहेड) | थोरै ढिलो (सुरक्षा उपायहरू सहित) |
उपयोग | एरेको पूर्ण प्रतिलिपि जस्ता | एकै एरे भित्रको डेटा स्थानान्तरण आदि |
पूरक:ओभरलैप छैन भन्ने थाहा भएमा memcpy
प्रयोग गर्न ठीक छ, तर निश्चय नहुनु भए memmove
चयन गर्नु सुरक्षित हुन्छ।
Q2. strcpy
र strncpy
को भिन्नता र प्रयोगको विभाजन के हो?
A. सुरक्षा र लचिलोपनको सन्तुलन भएकोले, प्रयोगको विभाजन आवश्यक छ।
strcpy(dest, src)
src
तर,dest
छोटो भएमा बफर ओभरफ्लोको खतरा हुन्छ。strncpy(dest, src, n)
n
安全性は高いが、が自動で付与されるとは限らない
सिफारिस गरिएको प्रयोगको विभाजन:
- यदि तपाईं निश्चित हुनुहुन्छ कि आकार पर्याप्त छ भने
- सुरक्षा पहिलो। अनिश्चित स्ट्रिङहरू ह्यान्डल गर्दा + म्यानुअल थप्नुहोस्
Q3. एरेलाई फलनको आर्गुमेन्टको रूपमा पास गर्दा ध्यान दिनुपर्ने बुँदाहरू छन्?
A. एरे पोइन्टरमा “विकास” हुने कारणले, sizeof
द्वारा आकार प्राप्त गर्न सकिँदैन।
void copy_array(int arr[], int size) {
printf("%zu
", sizeof(arr)); // ← पोइन्टरको आकार(उदाहरण:8)हुनछ
}
यसरी, एरेको वास्तविक आकार प्राप्त गर्न नसकिएपछिफलनमा पास गर्दा आकारलाई पनि आर्गुमेन्टको रूपमा सँगै पास गर्नुमूलभूत हो।
void copy_array(int arr[], int size) {
for (int i = 0; i < size; i++) {
// प्रक्रिया सामग्री
}
}
Q4. memcpy
द्वारा संरचनाको एरे प्रतिलिपि गर्दा समस्या छैन?
A. मूलतः सम्भव छ, तर “पॉइन्टर समावेशी संरचना” मा सावधानी आवश्यक छ।
memcpy
बाइनरी स्तरको प्रतिलिपि गर्ने कारण, संरचनामा पोइन्टर समावेश भएमा, पोइन्टरको सन्दर्भित स्थान(वास्तविक डेटा)सम्म प्रतिलिपि हुँदैन।
उदाहरण(सत प्रतिलिपि हुनेछ):
typedef struct {
char *name;
int age;
} Person;
Person a[3];
Person b[3];
memcpy(b, a, sizeof(a)); // पोइन्टर आफैँको प्रतिलिपि हुन्छ(सन्दर्भित स्थान साझा हुन्छ)
यस्ता अवस्थामा, डेटा दोहोरो मुक्ती वा असंगतताउत्पन्न हुन सक्छ। समाधानको रूपमा __193__पोइन्टर भागलाई अलग-अलग malloc
र strcpy
आदि द्वारा गहिरो प्रतिलिपि गर्न आवश्यक छ।
Q5. एरेलाई एकैपटक प्रतिलिपि गर्न चाहन्छु तर प्रत्येक पटक for लूप लेख झन्झट हुन्छ। के यो साझा फलनमा बनाइँन सक्छ?
A. हो, फलनमा रूपान्तरण गर्दा पुन: प्रयोग क्षमता बढ्छ, र कोड पनि सफा हुन्छ।
void copy_int_array(int *dest, int *src, int size) {
for (int i = 0; i < size; i++) {
dest[i] = src[i];
}
}
यसरी, प्रकार र प्रयोग अनुसार सामान्य प्रतिलिपि फलन तयार राखेरविकास दक्षता र पठनीयता सुधारिन्छ।
7. सारांश
यस लेखमा, C भाषा मा「एरेको प्रतिलिपि」सम्बन्धी, आधारभूतदेखि उन्नतसम्म प्रणालीगत रूपमा व्याख्यागरिएको छ। अन्तमा, महत्वपूर्ण बुँदाहरूलाई पुनरावलोकन गर्दै, व्यावहारिक प्रयोगको लागि सारांश तयार गर्नेछौं।
एरे प्रतिलिपिको आधार「सुरक्षा र उद्देश्यको स्पष्टता」हो
C भाषा मा, एरेहरूलाई सिधै =
द्वारा असाइन गर्न सकिँदैन। त्यसैले, प्रतिलिपि गर्न स्पष्ट प्रक्रिया आवश्यक हुन्छ।
for
लूपmemcpy
memmove
strcpy
/strncpy
सुरक्षित प्रतिलिपिका लागि「आकार व्यवस्थापन」अनिवार्य छ
- एरेको आकारको ले क्रैश र भेद्यता को कारण हुन्छ।
sizeof()
सही बाइट संख्या बुझ्नु- फङ्सनमा एरेहरू ह्यान्डल गर्दा, कुरा बुझ्नुहोस्, र साइजलाई पनि अर्गुमेन्टको रूपमा पठाउनुहोस्।
सामान्य त्रुटिहरू पनि बुझ्नुस्
strncpy
अन्तिम अक्षर नलग्ने सम्भावना हुन्छ- संरचना (struct) को प्वाइन्टर
memcpy
- मल्टिबाइट स्ट्रिङ (जापानी आदि) ह्यान्डल गर्दा、ध्यान दिनु आवश्यक छ。
व्यावहारिक प्रयोगको लागि
- प्रोजेक्ट भित्र बारम्बार एरे प्रतिलिपि हुने अवस्थामा, बनाउनु उपयोगी हुन्छ।
- कपी प्रक्रिया हो, त्यसैले युनिट परीक्षण आदि मार्फत सुरक्षा जाँच गर्न सिफारिस गरिन्छ।
अन्तमा
C भाषा एक लो-लेवल भाषा हो, त्यसैले एरेको प्रतिलिपि पनि गहिरो छ। तर, यस पटक प्रस्तुत गरिएको आधारभूत ज्ञान र प्रविधिहरूलाई बुझेमा, विभिन्न परिस्थितिहरूमा प्रयोग गर्न सकिनेछ।
कृपया, यो लेखलाई सन्दर्भ गरी「सही, सुरक्षित प्रतिलिपि प्रक्रिया」मा निपुण बनून्, र अधिक विश्वसनीय C भाषा कार्यक्रमहरू निर्माण गर्नुहोस्।