便乗
 const char *hage;
の const 対象はポインタだけだよね?

 hage = new_hage;   ← NG??

ちなみに
 strcpy((char *)hage, 'hage!');
は通るよね、どう理解したらいいんだい