Почему выходит исключение 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";
}
}