【发布时间】:2009-06-24 16:59:07
【问题描述】:
在下面的 C++ 代码中,我意识到 gcount() 返回的数字比我想要的要大,因为 getline() 消耗了最后一个换行符,但没有将其发送到输入流。
不过,我仍然不明白的是程序的输出。对于输入“Test\n”,为什么会得到“est\n”?为什么我的错误会影响字符串的 first 字符,而不是在末尾添加不需要的垃圾?为什么程序的输出与调试器中字符串的显示方式不一致(“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;
}
【问题讨论】:
-
在 RHEL4 上使用 g++ 3.4.3 为我工作。你的平台是什么?
-
对我来说也是如此:MinGW/MSYS (Windows XP) 上的 g++ 3.4.5
-
我在 Windows XP 上使用 Visual Studio 2005。这可能与我在 Windows 环境中创建测试文件的事实有关,因此换行符由两个字符组成?
-
尝试确定“vecBuffer.begin()”返回的内容。我知道这很愚蠢,但它看起来像是一个错误,这就是你的“一个”正在运行的地方。
-
对 vecBuffer.begin() 的两次调用都返回 84 ('T')。