cout 错误地打印出字符串的 Vector

cout incorrectly prints out the Vector of strings

下面的代码片段打印单词的第一个字母而不是整个单词。但是当我调试它时,我看到包含整个单词的数据数组。谁能解释一下为什么。

vector<string> data;
vector.resize(x);
for(int i=0; i<x; i++)
{
  infile.getline(&data[i][0],32,'\n');
  cout<<data[i];
  if(infile.fail()) break;
}

您超出了字符串的范围。 data[i] 是一个空字符串,写入 &data[i][0] 会导致未定义的行为。

代码可以替换为:

for (int i = 0; i < x; i++)
{
    if ( !getline(infile, data[i]) )
        break;

    if ( data[i].size() > 32 )
        data[i].resize(32);

    cout << data[i];
}

请注意,这也修复了您在输入失败后再次执行 cout << data[i]; 的错误。