为什么这个简单的程序会出现分段错误?

kin*_*er1 1 c++ string segmentation-fault

我写了一个简单的C++程序.这个想法是,一旦它看到一个非字母字符,然后直到它看到一个新单词(一个空白)或字符串结束,它继续递增迭代器.

这会产生分段错误,不明白为什么:(请帮助.

#include <iostream>
using namespace std;

int main()
{
 string str("Hello yuio");
 string::iterator it=str.begin();

 while(it!=str.end())
 {
  cout << *it << endl;

  if(isalpha(*it)==0){
   cout << *it << ":Is not an alphabet\n";

   while((*it!=' ')||(it!=str.end()))
   {
     cout << *it << endl;
     it++;
   }
  }

if(it!=str.end()){it++;}
  } // while loop ends
}  // End of main
Run Code Online (Sandbox Code Playgroud)

Ass*_*evy 11

while((*it!=' ')||(it!=str.end()))
Run Code Online (Sandbox Code Playgroud)

*it在检查it自己是否可以使用之前进行评估.改成:

while((it!=str.end())&&(*it!=' '))
Run Code Online (Sandbox Code Playgroud)


atz*_*tzz 5

while((*it!=' ')||(it!=str.end()))
Run Code Online (Sandbox Code Playgroud)

上面的行包含两个错误.

  1. 条件是循环应该继续,而当前字符不是空格字符串的末端尚未到达.即,即使到达终点但当前的char不是空格,循环也将继续.

  2. 一旦你解决了这个错误(通过更换||&&),你仍然尝试取消引用结束迭代(因为空间的支票来之前在检查字符串的结尾),这是不允许的.你必须改变条件的顺序:

    while((it!=str.end()) && (*it!=' '))