2011-09-30 55 views
2

我正在爲Linux x86_64系統上的C使用PCRE庫,儘管我不認爲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編碼方面有點新手,但是我完全失去了從這裏去的地方。

任何幫助表示讚賞!

回答

3

運算符優先級。 []運營商在*運營商之前被評估。在你的功能試試這個:

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

就是這樣!我相信我將來不會忘記這一點。感謝您的幫助! –