簡體   English   中英

為什么這個簡單的程序會產生分段錯誤?

[英]Why is this simple program giving a 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
while((*it!=' ')||(it!=str.end()))

*it在檢查it本身是否可以使用之前進行評估。 改成:

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

上面的行包含兩個錯誤。

  1. 該條件表明,當當前字符不是空格尚未到達字符串結尾時,循環應繼續進行。 即,即使到達末尾但當前char不是空格,循環仍將繼續。

  2. 一旦解決了該錯誤(通過用&&替換|| ),您仍然嘗試取消引用結束迭代器(因為對空格的檢查要於對字符串結尾的檢查),這是不允許的。 您必須切換條件的順序:

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

問題在這里:

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

當您到達字符串的末尾時,條件的第一部分為true,因此您將繼續循環並遞增迭代器。 您需要替換為&&

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM