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

302
Visualizações
¿Por qué pasar una cadena a scanf () compila bien en C?

Recientemente escribí un programa simple en el que, por error, uso scanf() en lugar de printf() para mostrar un mensaje en la consola. Esperaba obtener un error de tiempo de compilación, pero se compila bien sin advertencias y fallas en el tiempo de ejecución. Sé que scanf() se usa para tomar entradas del teclado. ¿No debería recibir un error al seguir el programa?

 #include <stdio.h> int main() { scanf("Hello world"); // oops, It had to be printf() return 0; }

¿Invoca un comportamiento indefinido (UB)? ¿Hay alguna mención sobre esto en el estándar C? ¿Por qué no se verifica en el momento de la compilación si los argumentos adecuados y válidos se pasan a la función scanf() o no?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

El código se está comportando correctamente. De hecho, scanf se declara

 int scanf(const char *format, ...);

Por suerte, su format no contiene ningún % para el que no habría correspondencia en ... , lo que invocaría a UB.
Además, el format es un literal de cadena que permite que el compilador lo revise, asegurándose de que pasó el tipo correcto de parámetros con respecto a los especificadores de formato, como parte de las comprobaciones de cordura habilitadas con niveles de advertencia más altos. (-familia de formato W)

over 4 years ago · Santiago Trujillo Relatório

0

Pasar una cadena a scanf compila bien, porque scanf espera una cadena como su primer parámetro. Consulte la documentación o el manual de programación para obtener una descripción detallada del scanf .

over 4 years ago · Santiago Trujillo Relatório

0

El compilador no puede leer tu mente.

Tanto printf("Hello world") como scanf("Hello world") están bien formados.

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