Я хочу контролировать длину, но никак не могу
Верно, что код не может дотянуться до пользователя волшебной рукой и удержать его от ввода, но код может (и если IMO), ограничьте ввод сохранено до некоторой щедрой суммы, скажем 1024 , чтобы прочитать имя .
Вход за пределы здравомыслия лучше воспринимается как атака, чем допустимый крайний случай. Такой ввод не нужно сохранять целиком, просто обнаруживать и обрабатывать.
Использование fgets()
int main(void) {
char p[1024];
if (fgets(p, sizeof p,stdin) == NULL) {
puts("Input closed");
return -1;
}
size_t len = strlen(p);
if (len > 0 && p[len - 1] == '\n') { // lop off potential \n
p[--len] = '\0';
}
if (len + 1 == sizeof p) { // too long a line
int ch;
while ((ch = fgetc(stdin)) != '\n' && ch != EOF) {
; // consume rest of line
}
printf("Input too long, first part <%s>\n", p);
return -1;
}
printf("Input OK <%s>\n", p);
return 0;
}