Passing char arrays to a function - best practice

I think you might benefit from one more comment:

WizenedEE:
sendMsg needs to take a const char* argument.

Correct. You have to define sendMsg to take a const char*, to signal to a user and the compiler that sendMsg won't change the text.

When you did that, you are free to supply const char and variable ones:

sendMsg("Hello "); // to allow this, we define sendMsg( const char *) 
char msg[20] = "variable text"; 
msg[0] = 'V';
sendMsg(msg);    // this is fine, too