Вы пытаетесь имитировать стандартную функцию strstr
, но эта функция не выполняет то, что вы просили.На самом деле он возвращает указатель на первое вхождение str
в to_find
.Ваш текущий подход на самом деле правильный.
Однако есть две ошибки.Одна - это строка в ft_strstr
:
return str[i - n - 1];
, которая должна быть:
return &str[i - n - 1];
Другая находится в main
:
printf("%s", *ptr);
, котораядолжно быть
printf("%s", ptr);
Исправьте эти две вещи, и ваш код должен работать как следует.
Если needle - пустая строка, возвращается стог сена;если в стоге сена нигде нет иглы, возвращается NULL;в противном случае возвращается указатель на первый символ первого вхождения иглы.
Указатель по-прежнему всегда (если это не нулевой указатель) указывает где-то в стоге сена.Я думаю, это то, что вас смущает.
Может быть, этот фрагмент кода поможет вам:
char *largestring = "Foo Bar Baz";
char *smallstring = "Bar";
char *ptr = strstr(largestring, smallstring);
int index = ptr - largestring;
Переменная index
теперь будет содержать индекс первого вхождения, в вашем случае это будетбыть 4. (Учитывая, что он был найден. В противном случае это может быть неопределенное поведение.)