ああ書き間違えた、5行目は
fp=(char *())f; だった
voidは他のポインタをキャスト可能ってあるんだけどなぁ…