正则表达式函数

时间:2015-10-11 23:33:43

标签: c regex pointers struct

如果我将这些代码全部放在一个函数中,我可以使一切工作正常,但现在我的问题是我无法读取我的正则表达式的结果。当我尝试打印第一个结果时,我得到一个分段错误。相反,我期待第一个正则表达式结果显示为“T / 2 / b”。

此外,在分段故障发生之前屏幕上会出现“匹配”一词。

我有什么遗失的吗?

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <regex.h>

typedef struct{
    char str[1000];
} regex;

long regexmatch(const char* str,const char* regexs,size_t nummatch,regex** reg){
    regex_t r;regmatch_t match[nummatch];
    if (regcomp(&r,regexs,REG_EXTENDED) != 0){return -1;}
    if (regexec(&r,str,nummatch,match,0)!=0){regfree(&r);return -1;}
    size_t i=0;
    for (i=0;i<nummatch;i++){
        if (match[i].rm_so > -1){
            memset((**reg).str,0,1000);
            memcpy((**reg).str,(char*)(str+match[i].rm_so),match[i].rm_eo-match[i].rm_so);
            (*reg)++; //this is where I load the result into the struct and advance the pointer.
        }
    }
    char *p=(**reg).str;
    *p='\0';
    regfree(&r);
    return 0;
}

int main(){
    char buf[1000];
    memset(buf,0,1000);
    regex* r=(regex*)buf;
    if (regexmatch("T/2/b","([A-Z]+)/([0-9]+)/([a-z]+)",10,&r)==0){
    printf("Matches\n");
    printf("%s\n",r->str); //causes segmentation fault. Expecting a "T/2/b" to be displayed instead.
    }
}

0 个答案:

没有答案