"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > C में पॉइंटर-आधारित और ऐरे-आधारित स्ट्रिंग्स के लिए `strlen` और `sizeof` अलग-अलग परिणाम क्यों देते हैं?

C में पॉइंटर-आधारित और ऐरे-आधारित स्ट्रिंग्स के लिए `strlen` और `sizeof` अलग-अलग परिणाम क्यों देते हैं?

2024-11-16 को प्रकाशित
ब्राउज़ करें:906

Why do `strlen` and `sizeof` produce different results for pointer-based and array-based strings in C?

पॉइंटर-आधारित और ऐरे-आधारित स्ट्रिंग आरंभीकरण के लिए स्ट्रिंग की लंबाई और आकार की गणना में विशिष्ट आउटपुट

परिणामों को समझना

एक ही मान के साथ एक पॉइंटर-आधारित स्ट्रिंग str1 और एक सरणी-आधारित स्ट्रिंग str2 बनाते समय, फ़ंक्शन strlen और sizeof अलग-अलग परिणाम उत्पन्न करते हैं। विशेष रूप से, घोषणाओं के लिए:

char *str1 = "Sanjeev";
char str2[] = "Sanjeev";

strlen str1 और str2 दोनों के लिए 7 लौटाता है क्योंकि यह अंत में नल-टर्मिनेटर (\0) को छोड़कर, वर्ण अनुक्रम की लंबाई को मापता है।

हालाँकि, sizeof अलग-अलग मान उत्पन्न करता है:

  • sizeof(str1) 4 लौटाता है क्योंकि यह पॉइंटर वेरिएबल के आकार का मूल्यांकन करता है, जो आमतौर पर 4 बाइट्स (32-बिट सिस्टम) होता है।
  • sizeof(str2) 8 लौटाता है क्योंकि यह सरणी का आकार निर्धारित करता है, जिसमें नल-टर्मिनेटर शामिल होता है, जिसके परिणामस्वरूप 8 बाइट्स (7 अक्षर 1 नल-टर्मिनेटर) होते हैं।

अंतर्निहित अंतर: डेटा प्रकार बनाम मेमोरी आवंटन

sizeof डेटा प्रकार के आकार को मापता है, जबकि स्ट्रेलन वर्ण अनुक्रम की लंबाई को मापता है। str1 के मामले में, यह एक char का सूचक है, इसलिए sizeof सूचक का आकार लौटाता है। str2 के लिए, यह वर्णों की एक सरणी है, इसलिए sizeof नल-टर्मिनेटर सहित संपूर्ण सरणी का आकार लौटाता है।

एक नज़दीकी नज़र

प्रदर्शित करने के लिए भेद बेहतर, विचार करें:

char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;

अब, str1 और str2 दोनों एक ही सरणी की ओर इशारा करते हैं। उनके स्ट्रलेन मान 7 हैं, लेकिन उनके आकार के मान भिन्न हैं:

  • sizeof(str1) 4 है (सूचक आकार)
  • sizeof(str2) 8 है (नल-टर्मिनेटर के साथ सरणी आकार )

यह उदाहरण देता है कि आकार का मूल्यांकन अंतर्निहित डेटा संरचना पर कैसे निर्भर करता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3