Я забираю свои комментарии, я читаю документацию более внимательно. Ваш код передает недопустимые параметры и вызывает обработчик недопустимых параметров. Может быть, это то, что происходит. А именно:
p=(char *)malloc(sizeof(char)*strlen("Hello!\n"));
Эта строка выделяет место для 7 символов, то есть длины строки, но недостаточно места для нулевого терминатора . (Это вообще ошибка)
Документация для strncpy_s
гласит: Эти функции пытаются скопировать первые D символов strSource в strDest, где D - это меньшее из количества и длины strSource. Если эти символы D будут соответствовать в пределах strDest (размер которого указан как numberOfElements) и все еще оставлять место для нулевого терминатора , то эти символы копируются, и завершающий ноль добавляется; в противном случае strDest [0] устанавливается в нулевой символ, и вызывается недопустимый обработчик параметра , как описано в разделе Проверка параметров.
Возможно, вы видите "недопустимый обработчик параметров"?