2013-06-03 8 views
11

यह क्यों है sizeof("Bill")5 है लेकिन sizeof(char)1 है?स्ट्रिंग के बाइट आकार लंबाई से अधिक क्यों है?

क्या sizeof("Bill")4 होना चाहिए क्योंकि स्ट्रिंग की लंबाई 4 वर्ण (4 x 1) है?

मुझे विश्वास है कि इसमें "Bill" वर्णों की एक सरणी होने के साथ कुछ करने के लिए हो सकता है, लेकिन यह बाइट आकार क्यों बढ़ाता है?

+4

@ H2CO3 है - मैं सहमत - इस सरल सी प्रोग्रामिंग कि आम तौर पर सी (या सी पर एक उचित प्रोग्रामिंग पुस्तक के अध्याय के पहले भीतर कवर किया जाता है ++) –

+7

ऐसा कोई कारण नहीं है कि इस प्रश्न का उपयोग एक अच्छा कैननिकल उत्तर लिखने के लिए और आशा है कि इंटरनेट को थोड़ा सा सुधारें। –

+2

@EdHeal शायद बंद करने का वोट आपके लिए एक अच्छा संकेत होगा;) मैं पूरी तरह से सहमत हूं, यह प्रश्न अक्सर पूछे जाने वाले प्रश्नों में "कोई शोध प्रयास नहीं दिखाता" शब्द बहुत अच्छी तरह फिट बैठता है। –

उत्तर

22

सी स्ट्रिंग्स को निरस्त कर दिया गया है। उस स्ट्रिंग के अंत में एक शून्य बाइट है।

'B' 'i' 'l' 'l' '\0' 
0x42 0x69 0x6c 0x6c 0x00 
सी मानक से

, धारा 6.4.5 स्ट्रिंग शाब्दिक, पैरा: 7:

अनुवाद चरण 7, एक बाइट या के कोड में ASCII मान लिया जाये, "Bill" स्मृति में इस तरह दिखता है मान शून्य प्रत्येक मल्टीबाइट वर्ण अनुक्रम में जोड़ा जाता है जो एक स्ट्रिंग अक्षर या शाब्दिक के परिणामस्वरूप होता है।

आप लंबाई के लिए 4 का एक जवाब प्राप्त करना चाहते हैं, तो आप बल्कि sizeof से strlen("Bill") उपयोग करना चाहिए।

यदि आप वास्तव में शून्य टर्मिनेटर नहीं चाहते हैं, तो यह भी संभव है, हालांकि शायद बीमार सलाह दी गई है। इस परिभाषा:

char bill[4] = "Bill"; 

एक 4-बाइट सरणी bill सिर्फ पात्रों युक्त निकलेगा 'B', 'i', 'l', और 'l', कोई अशक्त-टर्मिनेटर के साथ।

3

यह एक टर्मिनेटर चरित्र के रूप में एक 0 है, इसलिए इसके B i l l 0

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