次のコードを使用してテキスト ファイルを読み込もうとしています。
void function readfile(char *inputfile) {
istream is;
int filesize = 0;
is.open(inputfile);
if (!is.is_open()) {
return;
}
is.seekg(0, ios::end);
filesize = (int)is.tellg();
is.seekg(0, ios::beg);
char *buf = new char[filesize];
is.read(buf, filesize);
is.close();
cout << buf << endl;
delete[] buf;
return;
}
g++ (mac / macports) では正しく動作しますが (動的に割り当てられた char* 配列にすべてのコンテンツを取得します)、Visual Studio C++ 2010 では、次のタイプの定数エラーが発生します: Debug assertion failed: (unsigned)(c+1) <= 256, file isctype.c
.
問題は、ファイルを開きますが、終了区切り文字が見つからないため、eof に到達すると別の場所 (文字化け文字) の読み取りを開始することです。を使用するcout << buf;
と、Mac ではファイルが正しく読み取られていることがわかりますが、Visual C++ ではより多くのガベージ文字が入力されます。ここで何が問題なのですか?