2013-07-17 4 views
6

किसी ने मुझे बताया कि मुझे atoi() का उपयोग नहीं करना चाहिए, और मुझे हमेशा strtol() का उपयोग करना चाहिए। atoi() के साथ क्या गलत है कि मुझे इसका उपयोग नहीं करना चाहिए? strtol() वास्तव में इसके बजाय उपयोग करने के लिए सही चीज़ है?मुझे atoi() का उपयोग क्यों नहीं करना चाहिए?

+0

नोट: मुझे पूरी तरह से पता है कि क्यों 'atoi()' का उपयोग नहीं किया जाता है। हालांकि, जबकि मैं 'atoi() 'का उपयोग करने के बारे में प्रश्न देखता हूं, जो बताता है कि इसका उपयोग क्यों न करें, मुझे यह सीधा सवाल नहीं मिला है, और मुझे लगता है कि प्रश्न और उत्तर एक साथ जुड़े हुए होंगे एक जोड़ी के रूप में ठीक से। –

+0

(इसके अलावा, मैं यह देखने के लिए उत्सुक हूं कि लोग किस जवाब के साथ आते हैं। भिन्नता दिलचस्प हो सकती है।) –

+1

क्या इस पर मौत पर चर्चा नहीं हुई है? क्या आपने इस वेबसाइट को थोड़ा सा देखा है? –

उत्तर

16

अपनी खुद की link से (? और क्या इस तथ्य के बारे में strtol() एक long, न कि एक intatoi() की तरह रिटर्न कि):

atoi() फ़ंक्शन() strtol द्वारा सम्मिलित किया जाता है, बल्कि इसलिए बनाए रखा है यह मौजूदा कोड में बड़े पैमाने पर उपयोग किया जाता है। यदि संख्या सीमा में नहीं जाना जाता है, तो strtol() का उपयोग किया जाना चाहिए क्योंकि atoi() को कोई त्रुटि जांच करने की आवश्यकता नहीं है।

या

atoi वहाँ जानने यदि स्ट्रिंग पारित वास्तव में एक संख्या है का कोई रास्ता नहीं है, वहाँ के रूप में कोई विशेष त्रुटि "वापसी" है अप्रचलित

4

atoi के साथ है। यह केवल दशमलव मानों (आधार 10) को संभालता है, इसलिए मनमानी आधारों को संभाल नहीं सकता है जैसे उदा। strtol। इसके अलावा यह हस्ताक्षरित पूर्णांक (अधिकांश प्लेटफ़ॉर्म पर 32 बिट्स) से बड़े मानों को संभाल नहीं सकता है।

4

यदि स्ट्रिंग बहुत बड़ी होगी और इसे परिवर्तित नहीं किया जा सकता है, तो यह अनिर्धारित व्यवहार का कारण बनता है क्योंकि उस स्ट्रिंग का मान बहुत बड़ा हो सकता है और यह सीमा में नहीं हो सकता है। ऐसे मामलों में (जहां संख्या श्रेणी में ज्ञात नहीं है) strtol() का उपयोग किया जाना चाहिए।

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