小编hig*_*555的帖子

在C中使用regexec/strtok_r时出现分段错误

我在弄清楚我收到分段错误的位置和原因时遇到了问题.

我正在编写一个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); …
Run Code Online (Sandbox Code Playgroud)

c regex strtok segmentation-fault

6
推荐指数
1
解决办法
576
查看次数

标签 统计

c ×1

regex ×1

segmentation-fault ×1

strtok ×1