指向字符串数组的指针功能很好但不在外面

时间:2011-09-30 17:56:36

标签: c arrays function pointers

我正在使用PCRE库在Linux x86_64系统上使用C,但我不认为PCRE应该归咎于我遇到的问题。基本上我有一个字符数组数组,用于保存PCRE检查的结果。我使用typedef保持干净

typedef char *pcreres[30];

处理匹配等的函数

int getmatch(const char *pattern, char *source, pcreres *res){
const char *error;
    int erroffset, rc,i;
    int ovector[30];

    pcre *re = pcre_compile(pattern,PCRE_CASELESS | PCRE_MULTILINE, &error,&erroffset,NULL);
    rc=pcre_exec(re,NULL,source,(int)strlen(source),0,0,ovector,30);

    if(rc<0){
        return -1;
    }
    if(rc==0) rc=10;
    for(i=0;i<rc;i++){
        char *substring_start=source+ovector[2*i];
        int substring_length=ovector[2*i+1] - ovector[2*i];
        *res[i] = strndup(substring_start,substring_length);
    }
    return rc;
}

我正在测试的代码有2个结果,如果我在返回之前在函数中放入了printf(“%s”,* res [1]),我得到了预期的结果。

然而,在我的主函数中,我调用了getmatch(),我有这个代码;

pcreres to;
mres=getmatch(PATTERN_TO,email,&to);
printf("%s",to[1]);

我得到一个空字符串,但是[0]输出正确的结果。

我在C编码方面有点新手,但我完全迷失在哪里。

感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

运营商优先权。在[]运算符之前评估*运算符。在你的函数中试试这个:

(*res)[i] = strndup(substring_start,substring_length);