cout错误地打印出了字符串向量

时间:2015-04-05 01:56:40

标签: c++ string visual-c++ vector

下面的代码片段是打印单词的第一个字母而不是整个单词。但是当我调试它时,我看到包含整个单词的数据数组。任何人都可以解释原因。

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;
}

1 个答案:

答案 0 :(得分:0)

您超出了字符串的范围。 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];的错误。