दिखा यहाँ C99 कोड का एक टुकड़ा है। मुझे समझ में नहीं आता क्यों sizeof(c)
2
का तात्पर्य है क्योंकि मैंने c
को एक स्ट्रिंग अक्षर के रूप में परिभाषित किया है जो तुरंत NULL
समाप्त हो गया है। क्या कोई समझा सकता है कि यह मामला क्यों है? क्या आप एक (कुछ) संसाधन भी प्रदान कर सकते हैं जहां मैं अपने समय पर इस घटना की जांच कर सकता हूं।sizeof() अलग उत्पादन
उत्तर
समझ में नहीं आया कि क्यों के आकार, एक अंतर्निहित समाप्त अशक्त चरित्र है 2.
एक स्ट्रिंग शाब्दिक दिखाया जा रहा है तो ch[]
वास्तव में \0\0
है, इसलिए आकार दो है। अनुभाग से 6.4.5 स्ट्रिंग शाब्दिक C99 मानक के (मसौदा n1124), खंड 5:
अनुवाद चरण 7 में, एक बाइट या शून्य मूल्य का कोड प्रत्येक multibyte चरित्र अनुक्रम कि से परिणाम में जोड़ा जाता है एक स्ट्रिंग शाब्दिक या शाब्दिक
strlen()
के लिए, यह पहली शून्य समाप्ति चरित्र से सामना करते समय गिनती रोकता है। लौटाया गया मान sizeof
स्ट्रिंग युक्त सरणी से असंबंधित है। ch[]
के मामले में, शून्य वापस किया जाएगा क्योंकि सरणी में पहले वर्ण एक शून्य टर्मिनेटर है।
आपको यह भी कहना चाहिए कि स्ट्रेल 0 है क्योंकि पहला अक्षर शून्य है – SheetJS
मैं आपसे सहमत हूं कि स्ट्रिंग ने शून्य चरित्र को समाप्त कर दिया है। अगर ch '' \ 0 \ 0 '' है तो स्ट्रेलन (सी) 1 होना चाहिए, लेकिन यह 0 – avinashse
'strlen' रोकता है जब यह '\ 0' से मुकाबला करता है, जो' ch' का पहला अक्षर है। इसे '1' क्यों वापस करना चाहिए? – Nbr44
"\0"
""
जैसा नहीं है। स्ट्रिंग अक्षर शून्य-समाप्त होते हैं, इसलिए पहला यौगिक शाब्दिक (char){ 0, 0 }
जैसा होता है जबकि दूसरा (char){ 0 }
होता है। strlen
पहला अक्षर शून्य होने के लिए पाता है, इसलिए स्ट्रिंग समाप्त होता है। इसका मतलब यह नहीं है कि डेटा समाप्त होता है।
आप एक स्ट्रिंग शाब्दिक रूप में घोषित जब:
char c[]="\0";
यह पहले से ही अंत में एक '\0'
चरित्र है तो sizeof(c)
2
देता है क्योंकि आपके स्ट्रिंग शाब्दिक वास्तव में है: \0\0
।
strlen(c)
अभी भी 0
देता है क्योंकि यह पहले \0
पर बंद हो जाता है।
strlen
पहले \ 0 करने के उपायों और इससे पहले कि \ 0 पात्रों में से गिनती देता है, तो इसका जवाब शून्य
एक चार एक्स [] पर sizeof
बाइट्स जो दो है में प्रयोग किया जाता संग्रहण की मात्रा देता है, स्ट्रिंग
ग्रेट प्रश्न के अंत में स्पष्टीकरण \ 0 सहित। इस पर विचार करो ...
[email protected]:/tmp$ more x.c
#include <stdio.h>
#include <string.h>
int main() {
char c[16];
printf("%d %d\n",sizeof(c),strlen(c));
return 0;
}
[email protected]:/tmp$ ./x
16 0
[email protected]:/tmp$
भी इस पर विचार करें:
[email protected]:/tmp$ more x.c
#include <stdio.h>
#include <string.h>
int main() {
int c[16];
printf("%d\n",sizeof(c));
return 0;
}
[email protected]:/tmp$ ./x
64
[email protected]:/tmp$
जब आप एक सरणी के रूप में एक चर को प्रारंभ (जो प्रभावी रूप से है क्या सी [] है), sizeof (ग) आप सरणी के आवंटित आकार दे देंगे ।
स्ट्रिंग "\ 0" शाब्दिक स्ट्रिंग \ NUL \ NUL है जो दो बाइट लेती है।
दूसरी ओर, strlen() स्ट्रिंग लंबाई जो पहले समाप्ति चरित्र की स्ट्रिंग में ऑफसेट है की गणना करता है और कहा कि पता चला है शून्य होने के लिए और इसलिए आप 2 मिलता है, 0.
सी में, ""
का अर्थ है: मुझे एक स्ट्रिंग दें और इसे मेरे लिए समाप्त करें।
उदाहरण arr[] = "A"
के लिए पूरी तरह से arr[] = {'A', '\0'};
के बराबर है इस प्रकार "\0"
साधन: मुझे एक स्ट्रिंग एक अशक्त समाप्ति युक्त देते हैं, तो मेरे लिए इसे समाप्त शून्य।
arr [] = "\0"
"करने के लिए arr[] = {'\0', '\0'};
- 1. अलग sizeof परिणाम
- 2. रैंडम उत्पादन कार्यान्वयन के बीच अलग अलग
- 3. malloc (sizeof (int)) बनाम malloc (sizeof (int *)) बनाम (int *) malloc (sizeof (int))
- 4. असंगत sizeof
- 5. sizeof अप्रत्याशित रूप से
- 6. स्काला (एसबीटी) संकलन त्रुटि: अलग उत्पादन पथ (उत्पादन, परीक्षण)
- 7. sizeof ऑपरेटर ग andd C++ में विभिन्न
- 8. रियल कार्यान्वयन जहां sizeof (size_t) <sizeof (अहस्ताक्षरित int)
- 9. sizeof नाव (3.0) बनाम (3.0f)
- 10. x64 पर sizeof (int)?
- 11. sizeof() एक वेक्टर
- 12. का उपयोग sizeof
- 13. sizeof सदस्य गणना त्रुटि
- 14. sizeof सूचक सरणी
- 15. C2070 - अवैध sizeof संकार्य
- 16. sizeof (* इस) वर्ग परिभाषा
- 17. sizeof खाली वर्ग
- 18. sizeof बनाम strlen
- 19. sizeof सरणी स्पष्टीकरण
- 20. रेल: उत्पादन से स्टेजिंग को अलग करना
- 21. मुद्रण sizeof (टी) संकलन समय पर
- 22. सी sizeof एक पारित कर दिया सरणी
- 23. sizeof (struct) रिटर्न अप्रत्याशित मूल्य
- 24. सी सूचक अंकगणित sizeof (struct)
- 25. C और C++ sizeof ('एक्स') में अंतर
- 26. sizeof सकता है (std :: सूची <T>) टी के विभिन्न प्रकार के लिए अलग-अलग हो?
- 27. sizeof() एक सी struct का हिस्सा - तरह
- 28. sizeof (2147483648) 8 बाइट्स है, जबकि sizeof (2147483647 + 1) 4 बाइट है
- 29. यह है कि sizeof (std :: परमाणु <पूर्णांक प्रकार>) == sizeof (पूर्णांक प्रकार) की गारंटी है?
- 30. प्रिंट ?? तथा !! अलग क्रम में विभिन्न उत्पादन दिखाएगा
पढ़ने बराबर है [क्या sizeof (और आगमन) वापसी करता है?] (Http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499) –
याद रखें 'strlen() '- पहले nul –
तक वर्णों की संख्या देता है यह भी पढ़ें: [5.2.1.2 कैरेक्टर सेट © आईएसओ/आईईसी आईएसओ/आईईसी 98 99: 201x] (https://is.muni.cz/www/408176 /38744863/International_Standard_for_C.txt): एक वर्ण निरंतर या स्ट्रिंग शाब्दिक में, निष्पादन वर्ण सेट के सदस्य स्रोत वर्ण सेट के संबंधित सदस्यों या बैकस्लैश के बाद से बचने वाले अनुक्रमों द्वारा प्रतिनिधित्व किए जाते हैं, जिसके बाद एक या अधिक वर्ण होते हैं। सभी बिट्स के साथ एक बाइट 0 पर सेट, जिसे शून्य वर्ण कहा जाता है, मूल निष्पादन चरित्र सेट में मौजूद होगा; यह एक चरित्र स्ट्रिंग को समाप्त करने के लिए प्रयोग किया जाता है। –