C 指向字符串数组的指针在函数中可以,但在外部不能

C 指向字符串数组的指针在函数中可以,但在外部不能,c,arrays,function,pointers,C,Arrays,Function,Pointers,我正在linux x86_64系统上使用PCRE library for C,但我不认为PCRE是我遇到的问题的罪魁祸首。基本上,我有一个字符数组,保存PCRE检查的结果。我用typedef保持它干净 typedef char *pcreres[30]; 以及处理匹配项检查等的函数 int getmatch(const char *pattern, char *source, pcreres *res){ const char *error; int erroffset, rc,i;

我正在linux x86_64系统上使用PCRE library for 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;
}
我得到一个空字符串,但是[0]输出正确的结果

我在C代码方面有点新手,但我完全不知道从这里该怎么走


感谢您的帮助

运算符优先级。在计算
*
运算符之前,先计算
[]
运算符。在您的函数中,尝试以下操作:

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

就这样!我相信我将来不会忘记这一点。谢谢你的帮助!
(*res)[i] = strndup(substring_start,substring_length);