Estoy portando algún código a Windows, y el compilador de Microsoft (Visual C++ 8) me dice que strerror()
no es seguro.¿Por qué no puedo usar strerror?
Dejando a un lado el factor de molestia en todas las cosas seguras de cadenas de Microsoft, realmente puedo ver que algunas de las funciones obsoletas son peligrosas. Pero no puedo entender lo que podría estar mal con strerror()
. Toma un código (int
) y devuelve la cadena correspondiente, o la cadena vacía si ese código no se conoce.
¿Dónde está el peligro?
¿Hay una buena alternativa en C?
¿Existe una buena alternativa en C++?
[editar]
Habiendo tenido algunas buenas respuestas, y ahora entendiendo que algunas implementaciones pueden ser lo suficientemente loco como para escribir en realidad a un buffer común compartido - inseguro para la reentrada dentro de un solo hilo, no importa entre hilos! - mi pregunta deja de ser "¿Por qué no puedo usarla y cuáles son las alternativas?" a "¿Hay alguna alternativa decente, sucinta en C y/o C++?"
Gracias de antemano
No puede usarlo porque Microsoft dice "el estándar ISO C sea condenado; no le dejaremos usarlo, a menos que anule la advertencia o el error con un pragma". También han prohibido memcpy() - eso es ridículo porque le dices cuántos bytes copiar y si no puedes pensarlo y sabes que hay suficiente espacio en el espacio objetivo para el número de bytes antes de llamar a memcpy() , no perteneces a un código de escritura de equipo en C o C++. –