Указатель на массив строк в порядке, но не снаружи - PullRequest
2 голосов
/ 30 сентября 2011

Я работаю с библиотекой 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, но я совершенно заблудился, куда идти.

Любая помощь приветствуется!

1 Ответ

3 голосов
/ 30 сентября 2011

Приоритет оператора. оператор [] вычисляется перед оператором *. В вашей функции попробуйте это:

(*res)[i] = strndup(substring_start,substring_length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...