• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

301
Vistas
Dar a snprintf() un tamaño demasiado grande cuando la salida es lo suficientemente pequeña

¿Este código causa un comportamiento indefinido? Porque el búfer tiene solo 128 bytes de largo, pero le digo a snprintf() que es más largo. Sin embargo, la cadena resultante es más corta que 128 bytes.

 #include <stdio.h> int main(void) { char buffer[128]; snprintf(buffer,294201,"%s","ABC"); puts(buffer); return 0; }
about 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

C 2018 7.21.6.5 2 dice:

La función snprintf es equivalente a fprintf , excepto que la salida se escribe en una matriz (especificada por el argumento s ) en lugar de en una secuencia. Si n es cero, no se escribe nada y s puede ser un puntero nulo. De lo contrario, los caracteres de salida más allá del n-1 se descartan en lugar de escribirse en la matriz, y se escribe un carácter nulo al final de los caracteres realmente escritos en la matriz.

Tenga en cuenta que esto no dice que a snprintf se le pasa una matriz de n o más caracteres. Por lo tanto, snprintf no tiene ninguna licencia para asumir que puede escribir en s[n-1] a menos que el fprintf al que es equivalente escriba n caracteres (incluido el carácter nulo de terminación).

Mirando esto de otra manera, supongamos que definimos un buffer de matriz de 294,201 caracteres, lo llenamos con datos y llamamos a snprintf(buffer,294201,"%s","ABC"); . ¿Esperaríamos que no cambie nada más allá de los primeros cuatro caracteres? Si algún otro byte en el búfer cambiara, entonces esta llamada snprintf no sería "equivalente a fprintf , excepto que la salida se escribe en una matriz..." Lo consideraría una violación de esta especificación si cambiara algo más en el búfer.

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda