>is.read(add, n); // 実際に読み取ったバイト数もわからない。処理前後の位置を調べるしかない?
>buf += add;

is.read(add, n);
buf.append(add, is.gcount());

でよかったと思う。あと、n は const で定義してれば char add[n +1]; でも怒られんよ。