How to limit scanf function in C to print error when input is too long?
c, input, scanf, string
Solution
If you must use `scanf` then I believe that the best that you can do is use the width specifier with something like: `"%31s"`, as you've already mentioned, then use `strlen` to check the length of the input, and discard the string and report an error if the input is longer than your limit.
Or possibly skip the `strlen` by additionally using an `%n` in your format string, e.g. `"%31s%n"`.
A format string using something like `%[^\n]` in place of `%s` simply instructs the function to continue reading until a newline, consuming other whitespace characters along the way. This is useful if you want to allow the input to include whitespace characters.
Review the docs for scanf (here's a copy of the man page).
Problem
I want to limit the scanf function so when I enter for example a `char* array <String...>` that has more then 30 characters, it will not get it and my output will be error. I got a hint to use [^n] or something like that but I don't understand how to do it? I know that I can use `scanf("%30s"..)` but I don't want the input to be valid and just the error. Any help would be great.