Почему регулярное выражение всегда возвращает 1?

Следующая функция проверяет, начинается ли имя переменной с буквы и может иметь предшествующие символы, которые являются буквами/цифрами. Почему возвращаемое значение всегда равно 1 независимо от ввода?

#include <regex.h>
#include <stdio.h>

int validate_var(char *str)
{
    regex_t reg;
    regcomp(&reg, "^[a-zA-Z]+[a-zA-Z0-9]*$", 0);
    int r = regexec(&reg, str, 0, NULL, 0);
    regfree(&reg);

    return r;
}

int main() {
    printf("%d\n", validate_var("abc")); // Reports 1, This makes sense
    printf("%d\n", validate_var("17"));  // Reports 1, This doesn't make sense
}

Ответ 1

Вы используете привязки (^ и $), но не разрешаете расширенный синтаксис, передавая REG_EXTENDED в regcomp(). См. страницу руководства.

Вы должны действительно проверить все возвращаемые значения, где-то из-за ошибки использования синтаксиса должен произойти сбой.

Обратите внимание, что ненулевое значение означает сбой.