Я не уверен, что вы понимаете, как использовать regexec
. Аргумент nmatch
сообщает regexec
количество предоставленных вами regmatch_t
объектов. Вы не инициализировали переменную nmatch
, так что это может быть любое неопределенное значение, которое на некоторой стадии может привести к сбою, или это может быть 0
, в этом случае функция regexec
определена как игнорировать аргумент pmatch
.
Если вам нужен только один regmatch_t
результат, попробуйте это:
void match_a(regex_t *a,char *str)
{
regmatch_t match;
size_t nmatch = 1;
regexec(a, str, nmatch, &match, 0);
}
Если вы хотите до 10 regmatch_t
(для регулярных выражений с группами и т. Д.), Попробуйте это:
void match_a(regex_t *a,char *str)
{
regmatch_t matches[10];
size_t nmatch = 10;
regexec(a, str, nmatch, matches, 0);
}
Для получения дополнительной информации прочитайте эту документацию .