Para el ejemplo simple en la pregunta, puede que no haya mucha diferencia en la seguridad entre las dos llamadas. Sin embargo, en el caso general snprintf()
es probablemente más seguro. Una vez que tiene una cadena de formato más compleja con múltiples especificaciones de conversión, puede ser difícil (o casi imposible) asegurarse de tener la longitud del búfer contabilizada con precisión en las diferentes conversiones, especialmente dado que las conversiones anteriores no producen necesariamente un número fijo. de los caracteres de salida.
Entonces, me quedaría con snprintf()
.
Otra pequeña ventaja de snprintf()
(aunque no está relacionada con la seguridad) es que te dirá qué tan grande de un buffer necesitas.
Una nota final - se debe especificar el tamaño del búfer actual en la llamada snprintf()
- que va a manejar la contabilidad para el terminador nulo para usted:
snprintf(buff, sizeof(buff), "%s", name);
Cambie # 2 a 'MAXLEN + 1' y serán idénticos en lo que escriben en' buff' en todos los casos (el valor de retorno será diferente si 'strlen (name)> 255'). –