>>115
そうです。出力先のアドレスに結果を書き込みます。

msg が指すアドレスを変更する例
LPSTR msg = "文字列1";
msg = "文字列2";

msg が指す変数(配列)の中身を変更する例
CHAR msg[8] = "文字列1";
lstrcpy(msg, "文字列2");

書き込み違反エラー!
LPSTR msg = "文字列1";
lstrcpy(msg, "文字列2""); // 変数として確保していない場所に書き込もうとしている。

バッファ超過エラー!
CHAR msg[5] = "文字";
lstrcpy(msg, "文字列"); // 変数として確保した場所を超えて書き込もうとしている。

C言語入門インターネット版 
ttp://homepage1.nifty.com/toshio-k/prog/c/
ここの文字列と配列に関連する項目を参照してみてください。