void loop() {
const char * const &local_string = "Will this string survive until second call to print_buffer()?";
print_buffer();
buffer[1] = (char*)local_string;
}
You cast away compiler errors at your peril.
Regardless of whether or not the const stuff works, I don't like the idea of saving, anywhere, a pointer to a local variable and using outside the scope of that variable.