2011-06-01 10 views
16

दिए गए सी में एक और स्ट्रिंग का हिस्सा कैसे कॉपी कर सकता हूं, मैं एक प्रारंभ और अंत सूचकांक, के साथ एक स्ट्रिंग (सी में) की प्रतिलिपि कैसे बना सकता हूं ताकि स्ट्रिंग केवल आंशिक रूप से कॉपी की जा सके (शुरुआत से अनुक्रमणिका सूचकांक सूचकांक)।मैं प्रारंभिक और समाप्ति सूचकांक

यह 'सी स्ट्रिंग कॉपी' strcpy जैसा होगा, लेकिन शुरुआत और अंत सूचकांक के साथ।

उत्तर

12

क्या आपने strncpy चेक किया है?

char * strncpy (char * destination, const char * स्रोत, size_t num);

आप यह समझना होगा कि शुरू और अंत वास्तव में एक संख्या बाइट्स की दूसरे करने के लिए एक स्थान से कॉपी करने के लिए परिभाषित करता है।

+0

जैसा कि मैंने पिछले उत्तर में उल्लेख किया है, लगभग कोई उचित सवाल नहीं है कि 'strncpy' एक अच्छा जवाब है। http://stackoverflow.com/questions/2889421/how-to-copy-a-string-into-a-char-array-in-c-without-going-over-the-buffer/2889483#2889483 –

+0

हमम। धन्यवाद @ जेरी। – karlphillip

43

उपयोग strncpy

उदा

strncpy(dest, src + beginIndex, endIndex - beginIndex); 

यह आपको

  1. मान्य कर दिया है कि dest काफी बड़ी है मान लिया गया है।
  2. endIndex से अधिक beginIndex
  3. beginIndex कम से कम strlen(src)
  4. endIndex कम से कम strlen(src)
+1

+1 इसे संपादित करने के बाद मुझे आपका जवाब पसंद आया। – karlphillip

6

बस memcpy का उपयोग है है।

यदि गंतव्य पर्याप्त नहीं है, तो strncpy शून्य समाप्त नहीं होगा। यदि गंतव्य स्रोत की तुलना में विशाल है, strncpy स्ट्रिंग के बाद गंतव्य को नल के साथ भरता है। strncpy व्यर्थ है, और तारों की प्रतिलिपि बनाने के लिए अनुपयुक्त है।

strncpymemcpy की तरह है सिवाय इसके कि यह स्रोत में एक बार देखने के बाद गंतव्य को नल के साथ भर देता है। स्ट्रिंग ऑपरेशंस के लिए यह बिल्कुल बेकार है। यह 0 गद्देदार रिकॉर्ड के साथ तय करने के लिए है।

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