Foros del Web » Programación para mayores de 30 ;) » C/C++ »

error "localtime unsafe"

Estas en el tema de error "localtime unsafe" en el foro de C/C++ en Foros del Web. Tengo este error en visual studio... Cita: error C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use ...
  #1 (permalink)  
Antiguo 16/11/2014, 12:30
 
Fecha de Ingreso: marzo-2014
Mensajes: 41
Antigüedad: 10 años, 1 mes
Puntos: 0
[Ayuda] error "localtime unsafe"

Tengo este error en visual studio...

Cita:
error C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
El metodo para dar la fecha seria algo asi

Código:
 private:
 struct tm *tiempo;
 int dia;
 int mes;
 int anio;


/*..................................*/

 public:
 string muestraFecha(){
 stringstream s;
 time_t fecha_sistema;
 time(&fecha_sistema);
 tiempo=localtime(&fecha_sistema); //Aqui es donde me da el error
 
 anio=tiempo->tm_year + 1900;
 mes=tiempo->tm_mon + 1;
 dia=tiempo->tm_mday;

 s<<dia<<"/"<<mes<<"/"<<anio<<endl;
 return s.str();
}
  #2 (permalink)  
Antiguo 16/11/2014, 14:43
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: error "localtime unsafe"

Buenas,

El compilador te dice que el uso de localtime es inseguro, ya que devuelve un puntero a una estructura estática. Esto resulta inseguro ya que esta estructura es única y es muy sencillo pisar el valor sin darse cuenta.
Por ejemplo si hacemos:
struct tm* t1 = localtime(0);
struct tm* t2 = localtime(time());

Tanto t1 como t2, valdrán lo mismo, la hora actual.

En su lugar, el compilador de Microsoft propone la función localtime_s que te permite almacenar el resultado correctamente tu propia estructura.

Código C:
Ver original
  1. private:
  2.  struct tm tiempo;
  3.  int dia;
  4.  int mes;
  5.  int anio;
  6.  
  7.  
  8. /*..................................*/
  9.  
  10.  public:
  11.  string muestraFecha(){
  12.  stringstream s;
  13.  time_t fecha_sistema;
  14.  time(&fecha_sistema);
  15.  localtime_s(&tiempo, &fecha_sistema);
  16.  
  17.  anio=tiempo->tm_year + 1900;
  18.  mes=tiempo->tm_mon + 1;
  19.  dia=tiempo->tm_mday;
  20.  
  21.  s<<dia<<"/"<<mes<<"/"<<anio<<endl;
  22.  return s.str();
  23. }
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 17/11/2014, 21:37
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: error "localtime unsafe"

Creo que vale aclarar que no se trata de un error, localtime() está en el estándar C y en el C++; ni error ni deprecated ni ostias.

Tiene sus cosas, y en el estándar C++11 se dice de ella...
"the functions asctime, ctime, gmtime, and localtime are not required to avoid data races"
Que viene a ser que pueden producir "data races" si se está invocando en forma concurrente desde distintos threads.

Microsoft ha querido imponer su variante por fuera del estándar dando gritos de alarma y que se viene el fin del mundo (¿o eran los mayas?), pero no es cierto, el fin del mundo es en el 4515 del calendario greco-lusitano.

Última edición por lareto; 17/11/2014 a las 22:21

Etiquetas: c++, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:01.