On many systems printf
is buffered, i.e. when you call printf
the output is placed in a buffer instead of being printed immediately. The buffer will be flushed (aka the output printed) when you print a newline \n
.
On all systems, your program will print despite the missing \n
as the buffer is flushed when your program ends.
Typically you would still add the \n
like:
printf ("%s\n", a);
An alternative way to get the output immediately is to call fflush
to flush the buffer. From the man page:
For output streams, fflush() forces a write of all user-space
buffered data for the given output or update stream via the stream’s
underlying write function.
Source: http://man7.org/linux/man-pages/man3/fflush.3.html
EDIT
As pointed out by @Barmar and quoted by @Alter Mann it is required that the buffer is flushed when the program ends.
Quote from @Alter Mann:
If the main function returns to its original caller, or if the exit function is called, all open files are closed (hence all output streams are flushed) before program termination.