hig*_*555 6 c regex strtok segmentation-fault
我在弄清楚我收到分段错误的位置和原因时遇到了问题.
我正在编写一个C代码,提示用户输入正则表达式并编译它,然后输入一个包含多个句子的字符串:
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: ");
Run Code Online (Sandbox Code Playgroud)
strtok_r用于将字符串拆分为以下任一分隔符.,?!然后生成的标记(句子)用作regexec函数中的字符串参数,该函数搜索它以查看先前编译的正则表达式是否包含在标记中:
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);
}
Run Code Online (Sandbox Code Playgroud)
这可能是我犯的一个愚蠢的错误,但任何帮助找到segfaul的原因将不胜感激!
编辑: 移动regfree到更合适的位置.但是,段错误仍在发生.我很确定它与正则表达式的读取方式或如何进行比较有关regexec.但是,无能为力.
而不是这个:
char *para;
fgets(para, 1000, stdin);
Run Code Online (Sandbox Code Playgroud)
写下这个:
char para[1000];
fgets(para, 1000, stdin);
Run Code Online (Sandbox Code Playgroud)
在第一个变体中,是一个指向内存中某处para的指针,用户输入的字符串被写入到该位置。最有可能的是,指向某个无效的地址,从而使您的程序立即崩溃。para
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |