gcount()
次の C++ コードでは、 が必要以上に大きな数値を返していることに気付きました。これgetline()
は、 が最後の改行文字を消費するが、それを入力ストリームに送信しないためです。
しかし、私がまだ理解していないのは、プログラムの出力です。「Test\n」と入力すると、「est\n」と表示されるのはなぜですか? 私の間違いが、文字列の末尾に不要なゴミを追加するのではなく、文字列の最初の文字に影響を与えるのはなぜですか? そして、プログラムの出力が、デバッガーでの文字列の表示方法と一致しないのはなぜですか (予想どおり、"Test\n")。
#include <fstream>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main()
{
const int bufferSize = 1024;
ifstream input( "test.txt", ios::in | ios::binary );
vector<char> vecBuffer( bufferSize );
input.getline( &vecBuffer[0], bufferSize );
string strResult( vecBuffer.begin(), vecBuffer.begin() + input.gcount() );
cout << strResult << "\n";
return 0;
}