C/Visual C - Funciones atoi, atol y atof

 
Vista:

Funciones atoi, atol y atof

Publicado por Cindy (3 intervenciones) el 18/07/2006 03:05:42
¿Porqué se dice que las funciones atoi, atol y atof no se debrían usar?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Funciones atoi, atol y atof

Publicado por Ion (7 intervenciones) el 18/07/2006 11:28:46
Hola:

El problema de estas funciones es que retornan "0", tanto si el valor no se puede convertir a numérico, como si el valor convertido es realmente un "0". Este inconveniente se puede evitar comprobando si la cadena a convertir es "0", "00", "000", ... para diferenciarlo del caso en que la cadena no se puede convertir.

Las funciones strtol, strtod... también tienen el mismo problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Funciones atoi, atol y atof

Publicado por fernando.gomez (1603 intervenciones) el 18/07/2006 16:51:37
Muy genérica tu pregunta. ¿Quién dice que no se deberían usar? ¿En qué
SO? ¿Con qué compilador?

PEEEEEEEEEERO... supongo que te refieres a las advertencias que lanza
el Visual C++ 8 cuando empleas estas funciones y otras, la mayoría,
del estándar ISO C/C++. Bueno, la razón es que según Microsoft, esas
funciones son __inseguras__. Ahora ya les dió por decir esto, y pues
ya las marcaron como depreciadas. Cuando un código está marcado como
depreciado quiere decir que se deja por compatibilidad con códigos que
lo utilizan, pero que en un futuras versiones no serán incluidas.
Esto, en mi opinión, es una tontería más de Microsoft y no deberías
tomártelo muy en serio. Digo, sería muy &$% de su parte que en un
futuro quitaran esas funciones, del estándar de C/C++, pero bueno, ya
conoces cómo se las gastan los tíos de Redmon. Microsoft incluyó sus
propias versiones que ellos consideran seguras, y usualmente tienen
nombres antecedidos con un guión bajo, como _atoi. Sería cuestión que
vieras en la documentación del compilador. Pero nuevamente, mi
opinión sería de que hicieras caso omiso -yo mismo lo hago.

Claro, es molesto que te el compilador te lance miles de advertencias,
pero lo que puedes hacer es desactivarlas. Si la advertencia se llama,
digamos, C1812, entonces escribe el siguiente código en un archivo que
empleen todos tus cepepés, usualmente en StdAfx.h:

#pragma warning(disable:1812)

es decir, después del "disable:" pon el número de advertencia y ya no
te volverá a molestar.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Funciones atoi, atol y atof

Publicado por Nelek (816 intervenciones) el 19/07/2006 10:55:47
Mira tu por donde, eso de quitar los warnings no lo sabia...

Si vieras tu lo que me rompi los cuernos mirando manual arriba, ayuda abajo por algunos warnings que me decian posible perdida de informacion debido a compatibilidades del formato de datos...

Es decir, segun la ayuda oficial del MSDN la funcion CList::IsEmpty () te devuelve una respuesta de tipo BOOL, y yo todo era que recibir 67 Warnings cada vez que compilaba por su puñetera culpa. Al final, como no sabía eso de quitar los warnings... me declare las variables donde recibia las respuestas como UINT y me desaparecieron los warnings.

Respecto a la pregunta inicial... Coincido con fernando. Yo ni lo tomaba en serio. Esta claro que los tiempos cambian y las cosas evolucionan, y habra un momento en el que casi todo lo que hoy es puntero se quede obsoleto. Pero tambien opino que los de Microsoft, se creen infalibles y con derecho a hacer y deshacer a su antojo. Y es cierto que ellos llevan la voz cantante en muchas cosas y que han ayudado a mejorar otras, pero de ahi a que su palabra vaya a misa...

Yo soy de los que opinan que si hay dos maneras de hacer la misma cosa. Una de ellas usando metodos totalmente nuevos y la otra usando metodos muy antiguos, personalmente me decanto siempre por la antigua, cuanto mas cercano a los estandares de C, por mi mejor (repito que es una opinion personal). Aunque reconozco que hay otros momentos en los que no te queda mas remedio que capitular y adaptarte.

Como conclusion, decir que... por mucho que se diga o se oiga que si es recomendable o no recomendable una cosa, si se tiene en cuenta los casos en los que puede haber un fallo, mala interpretacion o ambigüedad... (vease el mensaje de ion) mientras el compilador no se queje con errores... que le den a los warning si el resultado de la ejecucion es lo que el programador queria lograr.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar