有人可以解釋爲什麼這些調用沒有返回相同的預期結果嗎?使用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]));
}
備註:我不是在尋找一個char
轉換爲int
的最佳途徑。
由於您傳遞給'atoi'單個'char'而不是它所期望的以null結尾的字符串,因此「按預期工作」會導致UB。 –
@littleadv:當然,我的意思是指向一個char的*指針;並且傳遞一個指向單個字符的指針肯定是UB,因爲你不能保證它跟在堆棧後面(實際上,它是UB毫無疑問是因爲你正在使'atoi'訪問內存超過「數組的最後一個元素「)。 –
@Matteo:毫無疑問,除非'[pos]'恰好是0字節,否則會導致'atoi'停止讀取的字符;-) –