>>11
pgnameがただ参照するだけの目的なら、
pgname = & str[last_yen];
でOK。
書き換えを伴うと言うのなら、malloc()でメモリ確保して云々。