Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

401
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; }
over 4 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.

over 4 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 Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda