2015-05-25 147 views
-5

我练我的“代码高尔夫”或编程面试样题,并不能找出为什么我在下面得到一个分段错误:这个程序中的段错误的原因是什么?

#include <iostream> 

bool contained (char * str1, char * str2) 
{ 
// returns true or false depending on whether the string str1 is contained in str2 
    while (str2) 
    { 
     if (*str1 == *str2) 
     { 
      char * temp = str2; 
      while (*str1++ == *temp++); 
      if (!*str1) return true; 
     } 
     else 
     { 
      ++str2; 
     } 
    } 
    return false; 
} 

int main() 
{ 
    char sa [] = "abc"; 
    char sb [] = "rehabc132"; 
    std::cout << contained(sa, sb); // should print out 1 
    return 0; 
} 

证明:http://codepad.org/5Ff3qTIX

任何想法为什么?

+1

由于第二个字符串更长,所以您正在运行超过第一个字符串的末尾... –

+4

此外,您可能是指'while(* str2)'? –

+0

'* str1 ++'嵌套在两个循环中,所以最终会跑出该字符串的末尾。 –

回答

0

错误1:外环应为while (*str2),否则您将超出范围并冒险出现段错误。

错误2:内环应检查没有任何字符串的reacehs结束:while (*str1 && *temp && *str1++ == *temp++);

错误3:在内部循环,你失去你要找的字符串的开头(STR1)。所以你应该使用另一个临时指针。我会把这部分留给你做一个练习。

相关问题