हां, सी sizeof(char)
को 1, हमेशा (और सी ++ भी करता है) परिभाषित करता है।
बहरहाल, एक सामान्य नियम के रूप में, मैं की तरह कुछ सलाह देंगे:
char *ptr = malloc(256 * sizeof(*ptr));
इस तरह, जब अपने मालिक का कहना है की तरह कुछ: "ओह, BTW हम सिर्फ चीन से एक आदेश मिला तो हम करने की जरूरत है यथाशीघ्र सभी तीन चीनी अक्षर संभाल ", आप इसे करने के लिए बदल सकते हैं:
wchar_t *ptr // ...
और बाकी ही रह सकते हैं। यह देखते हुए कि आपके पास लगभग 10 मिलियन सिरदर्द होने की कोशिश कर रहे हैं I18n को आधा रास्ते भी संभालने की कोशिश कर रहे हैं, कुछ को भी समाप्त करना सार्थक है। यह, ज़ाहिर है, सामान्य मामला मानता है कि आपके char
एस वास्तव में पात्रों को पकड़ने का इरादा रखते हैं - यदि यह किसी प्रकार का कच्चा बफर है, और आप वास्तव में 256 बाइट स्टोरेज चाहते हैं, भले ही कितने (कुछ) वर्ण हो सकता है, आपको शायद malloc(256)
के साथ रहना चाहिए और इसके साथ किया जाना चाहिए।
स्रोत
2010-07-01 22:17:38
देखें: http://stackoverflow.com/questions/2215445/are-there-machines-where-sizeofchar-1 – Saul
यह भी ध्यान देने योग्य है कि आकार() ऑपरेटर का संकलन समय पर मूल्यांकन किया जाता है, इसलिए कोई रनटाइम प्रदर्शन नहीं होता है sizeof() का उपयोग करने के लिए हिट करें। (उस मामले को छोड़कर जहां सरणी की लंबाई रनटाइम पर निर्दिष्ट होती है, लेकिन यह वह उदाहरण नहीं है जिसका उपयोग आपने किया था।) – poundifdef
कॉलोक क्यों नहीं? – luiscubal