Код
while(temp->text[i] != ptr[j] && temp->text[i] != '\0')
{
i++;
}
if(temp->text[i] == ptr[j])
{
while(temp->text[i] != '\0' && ptr[j] != '\0' && ptr[j] == temp->text[i])
{
j++;
i++;
}
if(ptr[j] == '\0')
{
printf("%s", temp->text);
}
}
завершается ошибкой, если первый раз ptr присутствует в temp-> text , а не в последовательности, которую вы ищете
например, если ptr - это «AZE», а temp->text
- «... A AZE», то вы первый раз установите i на 3 и после сравнения »AZE "и" A AZE "и не равны
Здесь предложение, код должен проверить, является ли мотив подстрокой текста каждого сообщения, поэтому более естественнымдолжен определить contient эквивалент strstr :
char * contient(const char * meule, const char * aiguille)
{
/* strstr */
while (*meule) {
const char * p1 = meule;
const char * p2 = aiguille;
if (*p1 == *p2) {
do {
p1 += 1;
p2 += 1;
if (*p2 == 0)
return (char *) meule;
} while (*p1 == *p2);
}
meule += 1;
}
return NULL;
}
void trouverMotif(message_t ** tete, char motif[])
{
message_t *temp = *tete;
while(temp != NULL)
{
/* printf("%s\n", p); */
if (contient(temp->text, motif) != NULL)
printf("'%s' found in '%s'\n", motif, temp->text);
temp = temp->suivant;
}
}
Например, если я добавлю:
typedef struct message_t {
char * text;
struct message_t * suivant;
} message_t;
message_t * mk(char * t, message_t * n)
{
message_t * r = malloc(sizeof(message_t));
r->text = t;
r->suivant = n;
return r;
}
int main()
{
message_t * tete = mk("19971230 20220512 JE SERAI INGENIEURE",
mk("19950511 20211230 ISI",
mk("19971230 20301123 INFORMATIQUE C'EST LA VIE",
mk("20020809 20081025 LANGAGE DE PROGRAMMATION",
mk("20070905 20201104 ECOLE INGENIEUR",
mk("19990102 20051025 ORDINATEUR",
mk("20081212 20200312 JE SUIS ", NULL)))))));
trouverMotif(&tete, "INGE");
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ ./a.out
'INGE' found in '19971230 20220512 JE SERAI INGENIEURE
'INGE' found in '20070905 20201104 ECOLE INGENIEUR
Примечание: вам не нужно trouverMotif(message_t ** tete, char motif[])
, потому что вы не изменяете tete , поэтому trouverMotif(message_t * tete, char motif[])
достаточно