Ich habe Probleme herauszufinden, wo und warum ich einen Segmentierungsfehler erhalte.Segmentierungsfehler bei Verwendung von regexec/strtok_r in C
Ich schreibe ein C-Code, der den Benutzer zur Eingabe eines regulären Ausdrucks aufgefordert und es kompilieren und dann einen String mit mehreren Sätze eingeben:
int main(void){
char RegExp[50];
regex_t CompiledRegExp;
char *para;
char delim[] = ".!?,";
char *sentence;
char *ptr1;
printf("Enter regular expression: ");
fgets(RegExp, 50, stdin);
if (regcomp(&CompiledRegExp,RegExp,REG_EXTENDED|REG_NOSUB) != 0) {
printf("ERROR: Something wrong in the regular expression\n");
exit(EXIT_FAILURE);
}
printf("\nEnter string: ");
strtok_r verwendet wird, um die Zeichenfolge mit einem der aufzuspalten folgende Begrenzer.,?! und dann wird die resultierende Token (Satz) als String-Parameter in der regexec Funktion verwendet wird, die er sucht, um zu sehen, ob der reguläre Ausdruck zuvor kompilierten innerhalb des Token enthalten ist:
if(fgets(para, 1000, stdin)){
char *ptr = para;
sentence = strtok_r(ptr, delim, &ptr1);
while(sentence != NULL){
printf("\n%s", sentence);
if (regexec(&CompiledRegExp,sentence,(size_t)0,NULL,0) == 0) {
printf("\nYes");
} else {
printf("\nNo");
}
ptr = ptr1;
sentence = strtok_r(ptr, delim, &ptr1);
}
}
regfree(&CompiledRegExp);
}
Es ist wahrscheinlich ein dummer Fehler, den ich bin Es wäre aber sehr hilfreich, irgendeine Hilfe bei der Suche nach den Gründen des Segfauls zu geben!
EDIT:Bewegt regfree
an einen geeigneteren Ort. Es tritt jedoch immer noch ein Segmentfehler auf. Ich bin mir ziemlich sicher, dass es etwas damit zu tun hat, wie der reguläre Ausdruck eingelesen wird oder wie er in regexec
verglichen wird. Ahnungslos, obwohl.
Was ist mit dem Debugger? –
Kompilieren Sie das Programm für das Debuggen, und führen Sie das Programm unter einem Debugger aus. Der Debugger wird Ihnen genau sagen, was passiert ist. – wallyk
Der gdb-Debugger gibt mir keine Details - behauptet nur, dass ein segfault gefunden wurde – higz555