Historias
Slashboxes
Comentarios
 
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • Re:warning C4996

    (Puntos:1)
    por Hiperion (16348) el Domingo, 17 Mayo de 2009, 16:39h (#1147867)
    ( http://www.septeto.com/ | Última bitácora: Sábado, 01 Octubre de 2005, 13:34h )
    El problema es que en C y C++, el procesador hace lo que tu le dices.

    Es decir, si reservas 5 de memoria, pero luego le dices que copie 10, copia 10 aunque sólo hayas reservado 5 (y si tienes suerte, esto te provoca un buffer overflow - o su variante de pantallazo azul si estas con un driver o el sistema operativo - si no tienes suerte... puedes dar permisos de administrador a un usuario invitado, o corromper datos/ficheros).

    ¿Por que se dice que el strcpy es malo? Porque en vez de estar diciendole cuanto tiene que copiar, le dices que "cuente" lo que tiene que copiar (Es decir, si he reservado un string de 5 posiciones, y le digo que copie otro, copiará del otro hasta que encuentre en el otro un caracter 0, lo cual puede ser que copie 2, que copie 3, o que copie 33).

    Ahora, ¿por que no usar el strncpy o el strncat? La respuesta corta es porque no es cómodo. Estas funciones, no tienen en cuenta el \0 del final de la cadena (es decir, si he reservado 5, y le pido que me copie una cadena que ocupa 33, me copia 5... pero no me pone el \0 al final porque no cabe), por lo que otras funciones, como el strlen, me darán datos probablemente falsos.

    Por ello, se han creado los strlcpy y los strcpy_s (puede que la sintaxis de microsoft este mal: no las uso).

    Para una explicación más detallada visita esta web:
    http://www.gratisoft.us/todd/papers/strlcpy.html [gratisoft.us]
    [ Padre ]
  • 1 respuesta por debajo de tu umbral de lectura actual.