Я практикуя свой «код гольф» или программирования интервью, как вопросы и не могу понять, почему я получаю ошибку сегментации в следующем:В чем причина ошибки сегментации в этой программе?
#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
Любой идеи почему?
Поскольку вторая строка длиннее, вы проходите мимо конца первой строки ... –
Также вы, вероятно, имели в виду 'while (* str2)'? –
'* str1 ++' вложен в два цикла, поэтому в конечном итоге вы завершите работу с этой строкой. –