std :: cout会影响编译结果吗?

时间:2017-10-21 16:12:23

标签: c++ compiler-errors runtime-error

我正在使用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”行会对编译结果产生很大的影响。

任何人都可以帮我解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:1)

cout正在使用缓冲区。在刷新缓冲区之前,“输出”仍保留在缓冲区 - 内存

但是当到达字符串的结尾时,while循环while (str[i] != ' ') ++i;继续运行。在线IDE为程序提供了一段时间然后放弃或发生分段错误