string - Object allocation in C++ -


  चार * myfunc () {char * temp = "string"; वापसी अस्थायी; }  

कोड के इस टुकड़े में, ऑब्जेक्ट के आवंटन को temp द्वारा इंगित किया जाता है और इसका दायरा क्या होगा?

क्या यह कार्य एक चार * पॉइंटर को वापस करने का एक वैध तरीका है?

क्या कोड सही है ?

हाँ आपका कोड (लगभग) ठीक है, क्योंकि "string" एक स्ट्रिंग है और स्थिर भंडारण में स्थित है।

नोट : एक सूचक सिर्फ एक वेरिएबल है जो स्मृति पते को स्टोर करता है। यह पंक्ति केवल temp नामक एक चर के अंदर स्ट्रिंग शब्दशः "स्ट्रिंग" का पता संग्रहीत करता है।

  char * temp = "string";  

सी ++ मानक यह गारंटी देता है कि स्ट्रिंग का शाब्दिक कार्यक्रम की अवधि के लिए स्मृति में रह जाएगा जैसा कि नीचे परिभाषित किया गया है। इसका अर्थ है कि आप अपने प्रोग्राम के पूरे जीवन के दौरान कहीं भी किसी भी क्षेत्र में उस मेमोरी पते का उपयोग करने के लिए स्वतंत्र हैं।


क्यों?

C ++ 03 मानक (वर्तमान) यह कहने के लिए है:

एक साधारण स्ट्रिंग शब्दशः प्रकार "सर कॉन्फ़ चार" और स्थिर भंडारण अवधि (3.7),

और खंड 3.7.1 - 1:

सभी वस्तुओं जो न तो गतिशील भंडारण अवधि है और न ही स्थानीय स्थैतिक संग्रहण अवधि हैं। इन ऑब्जेक्ट्स के लिए स्टोरेज प्रोग्राम की अवधि के लिए अंतिम होगा।


चेतावनी:

अपने कोड में आप लौट रहे हैं एक चार * , आप वास्तव में एक const char * लौटना चाहिए। यदि आप एक स्ट्रिंग को संशोधित करने का प्रयास करते हैं तो यह अपरिभाषित व्यवहार है, और आपका फ़ंक्शन रिटर्न वैल्यू यह अनुमति देने के लिए बहाना नहीं होना चाहिए।

चेतावनी के लिए एक संबंधित पक्ष नोट पर। यदि आपके कोड में 2 अलग-अलग जगहों पर है तो नाम से एक स्ट्रिंग होती है, चाहे वह अलग स्ट्रिंग हों, कार्यान्वयन को परिभाषित किया जाता है


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -