Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

397
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda