strstr
जैसे फ़ंक्शन पर विचार करें, यदि किसी स्ट्रिंग वाले किसी ऑब्जेक्ट के किसी हिस्से को पॉइंटर दिया जाता है, तो उसी ऑब्जेक्ट के संभवतः अलग-अलग हिस्से में पॉइंटर लौटाता है। यदि विधि को स्मृति के केवल पढ़ने के क्षेत्र में एक सूचक पास किया गया है, तो यह एक सूचक को स्मृति के केवल पढ़ने के क्षेत्र में वापस कर देगा; इसी प्रकार यदि इसे एक लिखने योग्य क्षेत्र में सूचक दिया जाता है, तो यह एक सूचक को एक लिखने योग्य क्षेत्र में वापस कर देगा।
सी में कोई रास्ता नहीं एक समारोह एक const char *
लौटने जब एक const char *
दिया है, और एक साधारण char *
लौटने जब एक साधारण char *
दिया करने के लिए नहीं है। के साथ संगत होने के लिए const char *
भाषा के विचार से पहले काम किया गया था, इसे एक कॉन्स्ट-क्वालिफाइड पॉइंटर को गैर-कॉन्स्ट-क्वालिफाइड पॉइंटर में परिवर्तित करना होगा। हालांकि यह सच है कि लाइब्रेरी फ़ंक्शन strstr
के रूप में ऐसा कोई कलाकार डालने का हकदार हो सकता है, भले ही उपयोगकर्ता कोड नहीं हो सकता है, वही पैटर्न अक्सर उपयोगकर्ता कोड में पर्याप्त होता है जो इसे प्रतिबंधित करना व्यावहारिक होगा।
यदि कास्ट यूबी नहीं है, तो मुझे लगता है कि यह होना चाहिए :) – pmg
आपके पास निश्चित रूप से शॉटगन स्थलों में आपका पैर स्क्वायर है! –
@pmg: अगर कास्ट स्वयं यूबी थे, तो भाषा को अनुमति देने वाली छोटी सी बात होगी - एक कंपाइलर के लिए यह पता लगाना आसान है कि एक कास्ट में 'कॉन्स्ट' जोड़ा गया है, वैसे ही यह पता चलता है कि' char * डीएसटी = डेटा; 'अवैध है। स्पष्ट रूप से कुछ बिंदुहीन चीजें हैं जो ऐतिहासिक कारणों के लिए मानक परमिट करती हैं, लेकिन मेरा दावा है कि यह उनमें से एक नहीं है :-) –