Co może być nie tak w następującym fragmencie programu pełniącego funkcję spisu książek? Po prawidłowej kompilacji dostaję błąd
Regex match failed: failed to match.
void poszukaj(void)
{
struct ksiazka *ptrthis; //wskaźnik na strukturę zawierającą tablicę tytul
if (ptrfirst == NULL) //wskaźnik na pierwszą strukturę, globalny
{printf("\n Katalog jest pusty."); return;}
int n;
char ch;
char bufor[50];
ptrthis=ptrfirst;
regex_t regex;
int reti;
char msgbuf[100];
do{
/*printf("W jakim polu chcesz przeszukiwac? 1-tytul 2-autor 3-rok.\n");
ch=getchar();
fflush(stdin);
if(ch!='1' && ch!='2' && ch!='3') printf ("Wpisz jeszcze raz poprawnie.\n");
} while (ch!='1' && ch!='2' && ch!='3'); //zostanie uwzględnione dodane później */
inputs("Wpisz poszukiwany ciag znakow. Mozesz uzywac masek: *-dowolny ciag, ?-dowolny znak.\n", bufor, 50);
zamien(bufor);
/* Compile regular expression */
reti = regcomp(®ex, bufor, 0);
if( reti ){ fprintf(stderr, "Could not compile regex\n"); exit(1);
}
while(ptrthis)
{
/* Execute regular expression */
reti = regexec(®ex, ptrthis->tytul, 0, NULL, 0);
if( !reti ){printf("Tytul: %s\n", ptrthis->tytul);
printf("Autor: %s\n", ptrthis->autor);
printf("Rok wydania: %s\n\n", ptrthis->rok);
n++;
}
else{
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
exit(1);
}
ptrthis=ptrthis->ptrnext;
}
/* Free compiled regular expression if you want to use the regex_t again
*/
regfree(®ex);
if (n==0) printf("Nie znaleziono podanego wyrazenia.\n");
else printf("Wyszukiwanie zakonczone. Wyniki wyswietlono powyzej.\n");
} //end of poszukaj
funkcje inputs, zamien:
void zamien(char *bufor)
{
int i=0;
int j=0;
char bufor2[100];
do
{
if (bufor[i]=='?')
bufor2[j+i]='.';
else if (bufor[i]=='*')
{
bufor2[j+i]='.';
bufor2[j+i+1]='*';
j++;
}
else
bufor2[j+i]=bufor[i];
i++;
} while(bufor[i]);
strcpy(bufor, bufor2);
}
void inputs(char *prompt, char *s, int count)
{
int i;
char p[255];
do {
printf (prompt);
fgets (p, 254, stdin);
if(strlen(p) > count+1) printf("\nZa dlugi.\n");
} while (strlen(p) > count+1);
p[strlen(p)-1] ='\0'; /* remove newline character */
strcpy(s, p);
}