本家サイトで英語で質問したものの、英語が苦手&現状回答が得られず、日本語で質問いたします。
test.txtというのが次のようになっています。

123456
89

※1行目は改行あり(WindowsでならCR/LF, CygwinでならLF)
2行目は改行なし

次のコードで
g++4.8.3(Cygwin 64bit)とVC++ 2013とでifstream::read()の出力が違います

#include <fstream>
#include <iostream>
#include <string>
#include <cstring>

int main()
{
    std::ifstream ifs("test.txt");
    if (ifs.fail())
    {
        std::cerr << "failed." << std::endl;
        return -1;
    }
    int begin = static_cast<int>(ifs.tellg());
    ifs.seekg(0, ifs.end);
    int end = static_cast<int>(ifs.tellg());
    int size = end - begin;
    ifs.clear();
    ifs.seekg(0, ifs.beg);
    char *str = new char[size + 1];
    ifs.read(str, size);
    std::cout << "[" << str << "]" << std::endl;
    std::cout << "size: " << size << "    strlen: " << std::strlen(str) << std::endl;
    delete[] str;
    return 0;
} 

g++ 4.8.3(Cygwin 64bit)では次のようにでます。

[123456
89
]
size: 10    strlen: 10

VC++ 2013では次のようにでます。

[123456
89]
size: 10    strlen: 9

どうして結果が違うのでしょうか?ifstream::read()の使い方がまずいのでしょうか?
本家サイトで質問しましたところ、読んでるファイルが違うんじゃ?といわれましたが、
確かに違いますが、問題はそこではないのです。
g++のほうはなぜか最後にLFが付加されてしまっているようです。

解決いたしました。ViがLFを追加していました……。ご回答ありがとうございました。