Вот пример - вам нужно проверить ввод и убедиться, что вы не переполняете буфер. В этом примере я отказываюсь от чего-либо, превышающего максимальную длину, и даю команду пользователю повторить попытку. Другим подходом будет выделение нового (большего) буфера, когда это произойдет.
fgets()
второй аргумент - максимальное количество символов, которое вы будете читать из ввода. На самом деле я учитываю \n
в этом примере и избавляюсь от него, возможно, вы не захотите этого делать.
#include <stdio.h>
#include <string.h>
void getInput(char *question, char *inputBuffer, int bufferLength)
{
printf("%s (Max %d characters)\n", question, bufferLength - 1);
fgets(inputBuffer, bufferLength, stdin);
if (inputBuffer[strlen(inputBuffer) -1] != '\n')
{
int dropped = 0;
while (fgetc(stdin) != '\n')
dropped++;
if (dropped > 0) // if they input exactly (bufferLength - 1) characters, there's only the \n to chop off
{
printf("Woah there partner, your input was over the limit by %d characters, try again!\n", dropped );
getInput(question, inputBuffer, bufferLength);
}
}
else
{
inputBuffer[strlen(inputBuffer) -1] = '\0';
}
}
int main()
{
char inputBuffer[10];
getInput("Go ahead and enter some stuff:", inputBuffer, 10);
printf("Okay, I got: %s\n",inputBuffer);
return(0);
}