Я работаю с библиотекой PCRE для C в системе Linux x86_64, хотя я не думаю, что 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, но я совершенно заблудился, куда идти.
Любая помощь приветствуется!