Все, что я пытаюсь сделать, это попросить пароль и распечатать сообщение об ошибке, если ввод длиннее 10 символов. Он работает, если первый вход короче 10 символов. Он просто распечатывает вход и выходит из программы. Если ввод длиннее 10 символов, сообщение об ошибке печатается, и он запрашивает новый пароль, но если на входе меньше 10 символов, во второй попытке он распечатывает вход, а затем программа прерывается с помощью сигнала «Thread: 1» SIGABRT ". Я знаю, что я не должен использовать get, но я пытаюсь найти способ заставить мой код работать с ним.C проверить ошибку ввода пользователя
#include <stdio.h>
#define BUFFER_LENGTH 11
int main() {
int cont;
while (1) {
char line[BUFFER_LENGTH];
char *p;
printf("Enter Password: ");
p = gets (line);
if (strlen(p)>10) {
printf("Error! Password must be shorter than 10 characters! \n");
}else{
printf(p);
printf("\n");
break;
}
}
}
Не используйте 'gets()', который был удален из C-стандарта. вместо этого используйте 'fgets()'. –
Вы выделили минимальный буфер для 'gets'. Если пользователь вводит более 10 символов, то 'gets' будет писать за конец' line'. Если вы используете 'fgets', тогда вы можете сказать, насколько велик ваш буфер, что является единственным способом защиты от этой проблемы (использование большего буфера делает ошибку менее вероятной). –
Когда я использую fgets(), и ввод длиннее 10 символов, он печатает сообщение об ошибке, а затем принимает символы после первых 10 и выводит их. Это не то, чего я хочу. Есть ли способ заставить fgets() работать для моей программы? – BLively