I recently wrote a simple program where I by mistake use scanf() instead of printf() for displaying a message on console. I was expecting to get compile time error, but it compiles fine without warnings & crashes at runtime. I know that scanf() is used for taking input from keyboard. Shouldn't I get an error in following program?
#include <stdio.h>
int main()
{
scanf("Hello world"); // oops, It had to be printf()
return 0;
}
Is it invokes undefined behavior(UB)? Is there any mention about this in C standard? Why it isn't checked at compile time whether proper & valid arguments are passed to scanf() function or not?
The code is behaving correctly. Indeed,
scanf
is declaredLuckily, your
format
does not contain any%
for which there would be no correspondence in...
, which would invoke UB.Further,
format
is a string literal which allows the compiler to go through it ensuring you passed the right type of parameters in regards to the format specifiers, as part of sanity checks enabled with higher warning levels. (-Wformat family)