यदि आप हैं दक्षता के लिए दबाए गए हैं, तो आप शायद अपना समय लिखने और डिबग करने के लिए प्रेरित कर सकते हैं।
लेकिन: बस इसे एक प्रति के साथ करें; स्ट्रिंग हो सकती है कि आपके पास शायद ऊपरी बाध्य है (एक दशमलव अंक जो long
में फिट बैठता है उसकी अधिकतम लंबाई पर सख्त ऊपरी सीमा है), ताकि आपके पास स्थिर बफर हो। फिर अपने पूरे एप्लिकेशन को प्रोफाइल करें, और देखें कि प्रतिलिपि/रूपांतरण वास्तव में एक बाधा है या नहीं। यदि यह वास्तव में है, तो आप जानते हैं कि आपको अपना खुद लिखना होगा।
long limited_strtol(const char *string, size_t len)
{
long sign = 1;
long value = 0;
for(; len > 0 && *string == '-'; string++, len--)
sign *= -1;
for(; len > 0 && isdigit(*string); string++, len--)
{
value *= 10;
value += *string - '0';
len--;
string++;
}
return sign * value;
}