strtol
आपको अधिक लचीलापन प्रदान करता है, क्योंकि यह वास्तव में आपको बता सकता है कि क्या संपूर्ण स्ट्रिंग को पूर्णांक में परिवर्तित किया गया था या नहीं। atol
, जब (atol("help")
में) की तरह एक नंबर करने के स्ट्रिंग परिवर्तित करने में असमर्थ, रिटर्न 0, जो atol("0")
से अप्रभेद्य है:
int main()
{
int res_help = atol("help");
int res_zero = atol("0");
printf("Got from help: %d, from zero: %d\n", res_help, res_zero);
return 0;
}
आउटपुट:
Got from help: 0, from zero: 0
strtol
अपने endptr
तर्क का उपयोग, निर्दिष्ट करेगा , जहां रूपांतरण विफल रहा।
int main()
{
char* end;
int res_help = strtol("help", &end, 10);
if (!*end)
printf("Converted successfully\n");
else
printf("Conversion error, non-convertible part: %s", end);
return 0;
}
आउटपुट:
Conversion error, non-convertible part: help
इसलिए, किसी भी गंभीर प्रोग्रामिंग के लिए, मैं निश्चित रूप से strtol
का उपयोग करें। यह उपयोग करने के लिए थोड़ा और मुश्किल है लेकिन जैसा कि मैंने ऊपर बताया है, इसका एक अच्छा कारण है।
atol
केवल बहुत ही सरल और नियंत्रित मामलों के लिए उपयुक्त हो सकता है।
स्रोत
2010-09-25 05:54:57
मुझे आपके उदाहरण में विश्वास है, स्थिति 'if (! * End)' होना चाहिए। यह स्ट्रिंग के शून्य टर्मिनेटर को इंगित करेगा (यदि यह सब परिवर्तित हो गया था) लेकिन इसे स्वयं को सेट नहीं किया जाएगा। –
@ जेफ एम: आप सही हैं, क्षमा करें टाइपो –
क्या यह वही तर्क लिनक्स कर्नेल फ़ंक्शन 'simple_strtol' पर लागू होता है? मुझे आपके सटीक मॉडल का उपयोग करके 'if (! * End) 'शर्त को सही करने के लिए शर्त नहीं मिल सकती है। –