[ad_1]
この関数は 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
使い果たされた場合、ループ境界の外にうまく行くことができます。
デバッガーを使用して、コードの実行中にコードが何を行っているかを正確に追跡すると、問題が発生した場所と変数の内容を確認できます。
[ad_2]
コメント