Вы начинаете выделять мне 4 байта с:
char* pass = (char*)calloc(PS, sizeof(char));
Затем вы вызываете free(pass)
, прежде чем даже использовать выделенные данные, только для того, чтобы затем выделить ноль байтов с:
pass = (char*)calloc(0, sizeof(char));
Если нет смысла выделять только свободные без использования выделения или выделять ноль байтов. Распределение нулевых байтов не определено, но ничего хорошего или полезного не произойдет, если вы попытаетесь записать такое распределение, как вы.
Постоянно перераспределение для добавления одного байта за раз также не рекомендуется. Для начала было бы лучше выделить буфер разумной длины и, если вам нужно расширить, расширить на количество символов в чанке.
В любом случае неясно, почему вы динамически распределяете и перераспределяете, чтобы разрешить ввод произвольного числа символов, которые вы не используете. Было бы проще и детерминистичнее просто принять четыре символа в массиве фиксированной длины и отбросить любой посторонний ввод.
Не существует такого понятия, как " пустой символ ", calloc
уже инициализировал присвоение нулю (нулевой символ).
Я почти уверен, что у этого кода много других проблем, но он должен был определить, что вы пытаетесь сделать, чтобы посоветовать; Вы бы хорошо использовать отладчик.