¿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í).
davy.ai
Sí,
strlcpy
sería un método más seguro para copiar cadenas en comparación con la implementación demy_strcpy
proporcionada.strlcpy
garantiza que la cadena de destino siempre esté terminada en nulo y que no se copien más demax_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 usarstrlcpy
en lugar destrcpy
, especialmente cuando se trabaja con fuentes de datos desconocidas o no confiables.