+ 4
Software you write does not have direct access to hardware so writing to for example a file is a complicated journey.
Your CPU operates in two modes, "user mode" and "kernel mode", and only in kernel mode you can access hardware directly. (All the code you run is in userland.)
Of course some kernel things we want to do all the time, even in userland, like writing to files, so the operating system (windows) gives us so-called "syscalls" - little functions that switch into kernel mode, execute some code, and then switch back.
This is great for safety and app-robustness and all, but switching modes is slow.
So instead of switching modes for each character, like un-buffered getchar does, the buffered functions keep, well, a buffer.
They execute the file reading syscall once, read an entire line or so from the file and store it internally (a plain C array) so we don't have to do a mode switch so often. That increases performance by a lot if you do a lot of I/O.
I hope that makes sense.