Под линуксом вы гарантированно словите сегфолт. На винде почему-то выход за границы массива не очень беспокоит систему (наверное по тому, что задеть другие программы он не может, а работоспособность конкретной программы личная проблема разработчика), зато вы запросто можете попортить данные своей же программмы, если вдруг случайно ваш "несуществующий" массив "наложится" на какие-нибудь переменные в вашей программе.
Вообще в вашем случае надо читать порционно по N символов в буфер размером не меньше чем N, а потом скидывать их в какой-нибудь std::array