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];
的错误。
下面的代码片段打印单词的第一个字母而不是整个单词。但是当我调试它时,我看到包含整个单词的数据数组。谁能解释一下为什么。
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];
的错误。