¿Podría alguien explicar por qué esas llamadas no están devolviendo el mismo resultado esperado?Diferentes resultados usando 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]));
}
Observación: No estoy buscando la mejor manera de convertir una char
a un int
.
El resultado "funciona según lo previsto" da como resultado UB, ya que está pasando a 'atoi' un único' char' en lugar de la cadena terminada en nulo que está esperando. –
@littleadv: seguro, quise decir un * puntero * a un solo 'char'; y pasar un puntero a un solo carácter es seguramente UB, porque no tienes garantías de lo que lo sigue en la pila (en realidad, es UB sin ninguna duda porque estás haciendo que la memoria de acceso 'atoi' pase al último elemento de la" matriz " "). –
@Matteo: sin ninguna duda, a menos que 's [pos]' pase a ser 0 byte, o un carácter que haga que 'atoi' deje de leer ;-) –