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

cout incorrectly prints out the Vector of strings

本文关键字:字符串 Vector 打印 错误 cout      更新时间:2023-10-16

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

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];的错误。