Ran the code and verified, prints "HiHi" which was surprising for me. Turns out the concept of buffer is correct, when in the parent printf is executed, as there is no \n in the end, buffer is not flushed and after the fork buffer is copied to the child also.
After the fork there is no statement and hence both parent and child exits. The buffer is flushed at the time of exit, both of which had "Hi" and hence "HiHi" is printed on the screen.
A very nice explanation along with a better example can be found here:
https://stackoverflow.com/questions/2530663/printf-anomaly-after-fork