【解決方法】部分文字列が見つからないときに、このコードで segfault が発生するのはなぜですか?


この関数は strstr に基づいて作成しました。
部分文字列が見つかった場合は、それを返します。 しかし、見つからない場合は、segfault が表示されます。 何を変更すればよいですか?

char	*ft_strstr(char *str, char *to_find)
{
	int	i;
	int	j;

	i = 0;
	j = 0;
	if (to_find[j] == '\0')
		return (str);
	while (str[i] != '\0')
	{
		while (str[i + j] == to_find[j] && str[i + j] != '\0')
			j++;
		if (to_find[j] == '\0')
			return (str + i);
		i++;
		j = 0;
	}
	return (0);
}

私が試したこと:

何度も変えましたがダメでした。

解決策 1

コードを見てください: 文字列の長さに制限されたループがありますが、その制限を超える文字にアクセスします:

while (str[i] != '\0')
{
    while (str[i + j] == to_find[j] && str[i + j] != '\0')

増やしてから j かどうかを確認せずに to_find 使い果たされた場合、ループ境界の外にうまく行くことができます。

デバッガーを使用して、コードの実行中にコードが何を行っているかを正確に追跡すると、問題が発生した場所と変数の内容を確認できます。

コメント

タイトルとURLをコピーしました