g++4.8.3(Cygwin 64bit)とVC++ 2013とでifstream::read()の出力が違います
本家サイトで英語で質問したものの、英語が苦手&現状回答が得られず、日本語で質問いたします。
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を追加していました……。ご回答ありがとうございました。