Почему выходит исключение Run-Time Check Failure #2

Не могу понять где я выхожу за массив

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char str[14];
    int a, b, c, d;
    a = b = c = d = 0;
    cout << "Введите пароль" << endl;
    cin >> str;
    if (strlen(str) >= 8 && strlen(str) <= 14)
    {
        for (int i = 0; i < 14; i++)
        {
            if (static_cast<int>(str[i]) >= 33 && static_cast<int>(str[i]) <= 126)
            {
                if (isalnum(str[i]) > 0)
                {
                    if (!(isalpha(str[i]) > 0))
                    {
                        a = 1;
                    }
                }
                if (isupper(str[i]) > 0)
                {
                    b = 1;
                }
                if (islower(str[i]) > 0)
                {
                    c = 1;
                }
                if (ispunct(str[i]) > 0)
                {
                    d = 1;
                }
            }
        }
    }
    if (a + b + c + d >= 3)
    {
        cout << "YES";
    }
    else
    {
        cout << "NO";
    }
}

Ответы (0 шт):