我正在使用C ++接收一个包含一些单词的字符串,这些单词由任意数量的空格分隔,并打印出每个单词的第一个字母。
这是我的代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "hi my name is rex";
int i = 0;
int len = str.length();
while (i < len) {
// cout << " blah "; // <--- Note this line
cout << str[i];
while (str[i] != ' ') ++i;
while (str[i] == ' ') ++i;
}
}
如果我运行这段代码,我将收到运行时错误(see here)。
然而,如果我取消评论“blah”行,我将获得“成功”,并且“等等等等等等等等等等”打印出来(see here)。
我知道我可能应该检查一下&lt; len在那两个嵌套的while循环中,但是我想知道为什么打印“blah”行会对编译结果产生很大的影响。
任何人都可以帮我解决这个问题吗?谢谢!
答案 0 :(得分:1)
cout
正在使用缓冲区。在刷新缓冲区之前,“输出”仍保留在缓冲区 - 内存
但是当到达字符串的结尾时,while循环while (str[i] != ' ') ++i;
继续运行。在线IDE为程序提供了一段时间然后放弃或发生分段错误