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

299
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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