Ver Mensaje Individual
  #4  
Antiguo 02-11-2024
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El código mostrado en si mismo es inútil, parece tomado de un fragmento de ejemplo.

En principio muestra un buffer de cadena llamado lectura con tamaño 50.

lectura[n] = '\0' sólo sirve para asegurar que si la cadena llega a tener n caracteres, el último sea un nulo, es una exigencia de las cadenas C, pero n sebe ser menor que 50 (máximo tamaño del buffer) En este caso, asegúrate que el caracter n-1 es el último no nulo.

El error mostrado es un aviso sobre la función strncpy. Esta función realiza una copia de una cadena a otra con un número máximo de caracteres copiados o hasta el final de la cadena a copiar si no se alcanza el límite. Si ponemos un límite mayor a 50 tendremos un desbordamiento. El aviso sugiere que lo desactives o que uses la función strncpy_s que pide también el tamaño de la cadena destino y es más segura. ¿Qué compilador estás usando?

Cuando no se sabe de antemano el tamaño de la cadena buffer, es buena idea asignarle uno grande y controlar que no se desborda o asignarlo dinámicamente una vez que se conozca.

Si se supone que vas a recibir n caracteres, reserva dinámicamente un buffer de n+1 caracteres (el último debe ser cero) y usa una función tipo strncpy o strncpy_s para asegurar que no vas a sobrepasar el límite. Al terminar, recuerda liberar la memoria asignada si fue dinámica.



Saludos.
Responder Con Cita