誰かがこれらの呼び出しが同じ結果を返さない理由を説明できますか?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
を変換するための最良の方法を探していませんよ。あなたの試みの
あなたが期待しているヌルで終了する文字列の代わりに '' char''を 'atoi'に渡すので、"意図した通りに動作します "という結果がUBにあります。 –
@ littadadv:確かに、私は*ポインタを1つの 'char'に意味しました。あなたが 'atoi'アクセスメモリを"配列 "の最後の要素を越えて作っているので、スタックに続くものの保証がないので、単一のcharへのポインタを渡すことは確かにUBです")。 –
@Matteo: 's [pos]'が0バイトでなければ、それ以外の場合は 'atoi'が読み込みを停止させるような文字ではありません;-) –