fp.read(( char * ) &buf, 1024 );

は何文字読み込んだのかどうやってわかりますか? freadはバイトが帰ってきますが