मैं वास्तव में string.h
कार्यों को "स्मृति" कार्यों के रूप में नहीं सोचूंगा। इसके बजाय, मैं उनके बारे में "सरणी" कार्यों के रूप में सोचूंगा, क्योंकि वे स्मृति के अनुक्रमों में मौजूद डेटा पर काम करते हैं। इसके विपरीत, malloc
(और अन्य), वास्तव में स्मृति के क्षेत्र में डेटा के हेरफेर के बजाय आवंटन जैसी स्मृति सेवाएं प्रदान करते हैं।
विशेष रूप से, string.h
में फ़ंक्शंस मेमोरी के किसी भी आवंटन या हटाने या स्मृति प्रबंधन के किसी भी प्रकार की देखभाल नहीं करते हैं। यहां तक कि char * strerror(int)
जैसे फ़ंक्शन, जो एक पूरी नई स्ट्रिंग बनाने के लिए प्रतीत होता है, कोई आवंटन नहीं करता है, क्योंकि रिटर्न मान वास्तव में एक स्थिर-आवंटित स्ट्रिंग है। अन्य फ़ंक्शन एक पॉइंटर को मेमोरी ब्लॉक में वापस कर सकते हैं, लेकिन यह वास्तव में उनके पैरामीटर में से एक है (उदा। memcpy
)। या वे एक उप-स्ट्रिंग (strtok
) की शुरुआत में एक सूचक लौटाते हैं, या एक तुलना का प्रतिनिधित्व करने वाला एक पूर्णांक (memcmp
)।
दूसरी ओर, stdlib.h
भी वास्तव में स्मृति के बारे में नहीं है। stdlib.h
का डिज़ाइन सामान्य उद्देश्य के संचालन प्रदान करना है जो बड़ी संख्या में कार्यक्रम की आवश्यकता होगी। मेमोरी फ़ंक्शन केवल ऐसे मौलिक परिचालनों के उदाहरण होते हैं। हालांकि, exit
और system
जैसे अन्य फ़ंक्शन भी अच्छे उदाहरण हैं, फिर भी स्मृति पर लागू न हों।
अब stdlib.h
में कुछ कार्य करता है जो IMO सकता string.h
में रखा गया है, विशेष रूप से विभिन्न रूपांतरण कार्यों (mbstowcs
, wcstombs
, atoi
, strtod
, आदि), और शायद bsearch
और qsort
कार्य हैं। ये फ़ंक्शन string.h
फ़ंक्शंस के समान सिद्धांतों का पालन करते हैं (वे सरणी पर काम करते हैं, नए आवंटित मेमोरी ब्लॉक वापस नहीं करते हैं)।
लेकिन एक व्यावहारिक दृष्टिकोण से, भले ही वह malloc
, realloc
, calloc
और free
कार्यों के साथ mem*
कार्यों गठबंधन करने के लिए भावना का एक बहुत बनाया, सी मानक पुस्तकालय कभी नहीं इस तरह पुनर्गठित किया जा रहा है। इस तरह के एक बदलाव निश्चित रूप से कोड तोड़ देगा। इसके अलावा, stdlib.h
और string.h
इतने लंबे समय से आसपास रहे हैं, और दोनों उपयोगी और मौलिक पुस्तकालय हैं, कि परिवर्तन शायद सबसे अधिक (या कम से कम, बहुत सी) कोड को तोड़ देंगे।
यह आपके द्वारा उपयोग की जा रही सी लाइब्रेरी के साथ कार्यान्वयन समस्या की तरह दिखता है। अन्य सी लाइब्रेरी memcpy को stdlib में ले जाने का विकल्प चुन सकती है। – AgA
'malloc' और गतिशील स्मृति आवंटन के साथ पारिवारिक सौदा। बाइट्स के अनुक्रमों के साथ 'memcpy' और परिवार सौदा। 'strcpy' और परिवार थोड़ा अलग तरीके से बाइट्स के अनुक्रमों से भी निपटते हैं। –
@AgA: यदि कोई सी लाइब्रेरी आईएसओ मानक के अनुरूप है तो 'memcpy'' string.h' में होगा, 'stdlib.h' नहीं। – Blastfurnace