Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

396
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!