es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Este método snprintf es una forma segura de copiar cadenas de texto?

Necesito tu consejo. Utilizo esta forma de copiar cadenas sabiendo un tamaño máximo para no pasarme, pero algunas de estas cadenas no terminan con un carácter nulo. Es solo un fragmento.

void my_strcpy(char* dest, const char* src, const size_t max_size)
{
    snprintf(dest, max_size, "%.*s", max_size - 1, src);
}

¿Existe un método más seguro? ¿strlcpy? (No he manejado errores aquí).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, strlcpy sería un método más seguro para copiar cadenas en comparación con la implementación de my_strcpy proporcionada. strlcpy garantiza que la cadena de destino siempre esté terminada en nulo y que no se copien más de max_size - 1 caracteres de la cadena fuente a la de destino para evitar desbordamiento de búfer. También devuelve la longitud de la cadena que se habría copiado si el búfer de destino hubiera sido lo suficientemente grande, lo cual se puede utilizar para detectar truncamiento. Por lo tanto, es una buena práctica usar strlcpy en lugar de strcpy, especialmente cuando se trabaja con fuentes de datos desconocidas o no confiables.

Comments are closed.