我正在练习我的代码高尔夫"或者编写类似访谈的问题,并且无法弄清楚我在下面遇到分段错误的原因:
#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
任何想法为什么?
答案 0 :(得分:0)
错误1:外部循环应为while (*str2)
,否则您将超出范围并冒着段错误的风险。
错误2:内部循环应检查字符串是否都没有结束:while (*str1 && *temp && *str1++ == *temp++ );
错误3:在内部循环中,您松开了您正在寻找的字符串的开头(str1)。所以你应该使用另一个临时指针。我将把那部分留给你作为练习。