Basically this line:
char local_string[] = "Will this string survive until second call to print_buffer()?";
Tells the compiler to allocate a local variable whose size is determined at compile-time to be 62 bytes. It is initialized with that string (hence the copy). However being non-const it can then be written to. Hence it is allocated on the stack, and attempts to save it and use it outside the function are not valid.