का उपयोग करके अलग-अलग परिणाम कोई बता सकता है कि वे कॉल एक ही अपेक्षित परिणाम क्यों नहीं लौट रहे हैं?atoi
unsigned int GetDigit(const string& s, unsigned int pos)
{
// Works as intended
char c = s[pos];
return atoi(&c);
// doesn't give expected results
return atoi(&s[pos]);
return atoi(&static_cast<char>(s[pos]));
return atoi(&char(s[pos]));
}
टिप्पणी: मैं सबसे अच्छा तरीका है एक int
करने के लिए एक char
कन्वर्ट करने के लिए नहीं देख रहा हूँ।
यूबी में "इरादे के रूप में काम करता है" एक परिणाम, क्योंकि आप शून्य-समाप्ति वाली स्ट्रिंग के बजाय 'atoi'' एकल 'char' में जा रहे हैं, इसकी उम्मीद है। –
@littleadv: निश्चित रूप से, मेरा मतलब था * सूचक * एक 'char'; और एक सिंगल को पॉइंटर पास करना निश्चित रूप से यूबी है, क्योंकि आपको स्टैक पर इसका अनुसरण करने की कोई गारंटी नहीं है (असल में, यह बिना किसी संदेह के यूबी है क्योंकि आप "एरोई" एक्सेस मेमोरी को "सरणी" के अंतिम तत्व से पहले बना रहे हैं ")। –
@ माटेटेओ: बिना किसी संदेह के, जब तक कि [pos] '0 बाइट नहीं होता है, या अन्यथा एक चरित्र जो 'atoi' को पढ़ने को रोकता है ;-) –