>>256
本当に事前にファイルサイズを得られないのなら、malloc(), realloc(), fread()でやるのが無難か。
size_t size = 0;
char * buffer = NULL;
char tmpBuf[適当なバッファサイズ];
do {
size_t len = fread(tmpBuf, 1, sizeof(tmpBuf), fp);
size += len;
buffer = realloc(buffer, size);
memcpy(buffer + size - len, tmpBuf, len);
} while (len < sizeof(tmpBuf));
こんなもんかな。文字列として扱いたいなら、最後にナル文字を附加するのを忘れずに。