Ver Mensaje Individual
  #12 (permalink)  
Antiguo 10/05/2013, 05:59
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Pasar de cadena de caracteres a INT

En cualquier manual de C encontraras que la funcion atoi está obsoleta, por lo que deja de formar parte del estandar aun cuando por motivos de libreria siga existiendo esa funcion.

Por otra parte la funcion atoi no tiene capacidad para manejar errores por lo que desaconseja su uso (aun sabiendo que esta obsoleta). Para usarse de forma segura (y no en todos los casos) es necesario comprovar que todos los caracteres que se espera que se conviertan sean numericos, y aun asi para la conversion del caracter "0" de forma aislada debe hacerse manualmente porque atoi retorna el mismo valor que cuando recibe un char* que no puede convertir.

Lo que normalmente se usa es strtol porque es estandar y permite el control de errores.

Una simple busqueda en google seguramente obtendreis una lista infinita de consultas en foros sobre porque atoi falla al convertir determinadas cadenas, y seguramente encontrareis muchas entradas donde se detalle mas tecnicamente que lo que acabo de exponer el porque de no usar atoi.


"...Sí, yo tampoco acabo de verle el problema..."

Ok, si yo voy a entrar una cadena tal como "123" obviamente no hay problema; el problema esta en que si quieres hacer una aplicacion distribuible (ya no digo comercializable) que cualquier persona puede entrar cualquier cosa cuando se solicita un entero tienes que usar funciones seguras y ademas tienes que implementar algun tipo de control de errores, con lo que atoi se queda fuera desde que puedes usar strtol. Seguramente en la red puedes encontrar alternativas para usar con atoi (como p.ej. reconvertir el entero a char* y comprovar si es igual al inicial), pero bueno el uso de este tipo de soluciones ya depende del criterio de cada uno.

Saludos
vosk