2011-12-21 4 views
13

संभव डुप्लिकेट:
Different answers from strlen and sizeof for Pointer & Array based init of Stringअंतर

किसी को भी मुझे sizeof विधि और ग प्रोग्रामिंग में strlen विधि के बीच समझ अंतर में मदद कर सकते हैं?

+1

यह टैग की गई सी ++ क्यों है? –

+0

मैंने टैग – Prabhu

उत्तर

21

strlen() चार्ज/स्ट्रिंग की सरणी की लंबाई प्राप्त करने के लिए उपयोग किया जाता है।

sizeof() बाइट्स में किसी भी प्रकार के डेटा का वास्तविक आकार प्राप्त करने के लिए उपयोग किया जाता है।

इसके अलावा, sizeof() एक संकलन-समय अभिव्यक्ति है जो आपको एक प्रकार या चर के प्रकार का आकार देता है। यह चर के मूल्य के बारे में परवाह नहीं करता है।

strlen() एक ऐसा फ़ंक्शन है जो किसी चरित्र को पॉइंटर लेता है, और इस चरित्र से स्मृति को एक पूर्ण चरित्र की तलाश में चलता है। यह नल चरित्र को खोजने से पहले वर्णों की संख्या की गणना करता है। दूसरे शब्दों में, यह आपको सी-स्टाइल न्यूल-टर्मिनेटेड स्ट्रिंग की लंबाई देता है।

दोनों लगभग अलग हैं। सी ++ में, आपको या तो बहुत अधिक की आवश्यकता नहीं है, strlen() सी-स्टाइल स्ट्रिंग्स के लिए है, जिसे सी ++ - शैली std::strings द्वारा प्रतिस्थापित किया जाना चाहिए, जबकि सी में sizeof() के लिए प्राथमिक अनुप्रयोग malloc(), memcpy() जैसे कार्यों के लिए तर्क के रूप में है या memset(), जिनमें से आप को सी ++ में उपयोग नहीं करना चाहिए (नया, std::copy(), और std::fill() या constructors का उपयोग करें)।

+1

+1 को हटा दिया, लेकिन यहां तक ​​कि 'std :: copy' और 'std :: fill' का उपयोग करके भी आपको सर-एरे के तत्वों की संख्या प्रदान करनी है यदि आप सी-स्टाइल सरणी का उपयोग कर रहे हैं। बिंदु बहुत अधिक 'memcpy'/'memset' बनाम एसटीएल एल्गोरिदम नहीं है, लेकिन सी-एरे/तार बनाम' std :: vector' /' std :: array'/'std :: string'/अन्य कंटेनर बनाम नहीं है। –

+2

"आकार एक संकलन-समय अभिव्यक्ति है" - सिवाय जब सी 99 में वीएलए पर उपयोग किया जाता है। –

+1

बस एक नाइट, लेकिन ... एक 'नल' सूचक और एक "शून्य सूचक" है, लेकिन यह एक नल चरित्र है (या जो मैं पसंद करता हूं: एक '' \ 0'' वर्ण)। –

9

sizeofविधि नहीं है। यह संकलन-समय का निर्माण है जो स्मृति की मात्रा को किसी विशेष प्रकार या परिवर्तनीय पर निर्भर करता है। दूसरी तरफ strlen, फ़ंक्शन है जो स्मृति में निर्दिष्ट स्थान से शुरू होने वाले निरंतर गैर-शून्य char मानों की संख्या की गणना करता है (जो शून्य-समाप्त सी स्ट्रिंग की लंबाई निर्धारित करने के समान होता है)।