¿Por qué no debería usar atoi()? [duplicate]

2 minutos de lectura

Alguien me dijo que no debería usar atoi()y que siempre debo usar strtol() en cambio. Qué hay de malo en atoi() que no debo usarlo? Es strtol() realmente lo correcto para usar en su lugar? (¿Y qué hay del hecho de que strtol() devuelve un longno un int me gusta atoi() ¿hace?)

  • Nota: Sé perfectamente por qué no usar atoi(). Sin embargo, aunque veo preguntas sobre cómo usar atoi() que explican por qué no usarlo, no he podido encontrar esta pregunta directa, y creo que sería útil tener la pregunta y la respuesta vinculadas correctamente como un par.

    – Este no es mi verdadero nombre

    17 de julio de 2013 a las 20:54

  • ¿No se ha hablado de esto hasta la saciedad? ¿Has mirado un poco este sitio web?

    – KerrekSB

    17 de julio de 2013 a las 20:58

  • Sí, se ha discutido hasta la saciedad. Sí, he mirado alrededor del sitio web. Lo que estaba buscando era una pregunta que decía “¿por qué no debería usar atoi()“, y no encontré ninguno. Lo que encontré fueron muchas preguntas sobre cómo usar atoi() que fueron respondidas básicamente con “No, y he aquí por qué”, pero sentí que la pregunta de por qué no usar atoi() justificaba una pregunta aparte. Como esta pregunta ahora se marcó como un duplicado de la que estaba buscando y no encontré, tengo lo que estaba buscando y estoy satisfecho.

    – Este no es mi verdadero nombre

    17 de julio de 2013 a las 21:16

  • Es una buena pregunta. La otra cosa molesta sobre el “no usar atoiusar strtol en cambio, la multitud es que es significativamente no obvio cómo usar strtol correctamente. Hasta ahora, ninguna de las respuestas aquí explica eso. Intentaré encontrar al menos un enlace a una de las otras preguntas donde se responda.

    – Steve cumbre

    24 de junio de 2018 a las 11:23

  • Es una buena pregunta. atoi es deficiente porque casi no detecta errores bien definidos, pero incluso cuando se usa strtol, detectar correctamente (y clasificar) los errores es sorprendentemente difícil, y ninguna de las respuestas aquí aborda eso. Consulte las respuestas a esta pregunta para obtener orientación.

    – Steve cumbre

    24 de junio de 2018 a las 12:04


Si la cadena será mucho más grande y no se puede convertir, provoca un comportamiento indefinido, ya que el valor de esa cadena puede ser demasiado grande y es posible que no esté dentro del rango. En tales casos (cuando No se sabe que el número esté dentro del rango) strtol() debería ser usado.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad