#c
#c
Вопрос:
Я пытаюсь получить строку на C и проверить ее длину. Если это значение больше 6, код должен сигнализировать об ошибке, и пользователь должен повторить операцию. Код такой:
char string[6];
int result = 0,
string_length = 0;
do{
printf("Insert string: n");
result = scanf("%s", string);
string_length = strlen(string);
if((result != 1) || (string_length >= 7)){
printf("Input not allowed try againn");
printf("Remember the string must be shorter than 6 character.n");
}
while(getchar() != 'n');
}while((result != 1) || (string_length >= 7));
Я надеюсь, что кто-нибудь сможет мне помочь.
Комментарии:
1. Вы не можете использовать
"%s"
в scanf для этого. При использовании"%s"
scanf будет использовать данные до пробелов, и если их будет более 5 символов, это приведет к переполнению буфера. Среди прочего, вы могли бы использовать"%5s"
.2. Не смешивайте
getchar
иscanf
, если вы не знаете, что делаете. И прочитайте sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html3. @WilliamPursell Я сделал то, что вы сказали, и, похоже, это сработало. Я не могу отправить сообщение об ошибке пользователю таким образом, но, по крайней мере, оно не сбой. Функция getchar используется для очистки буфера от любой грязи, поэтому она должна быть там, но также спасибо за этот совет. Большое спасибо.
Ответ №1:
Массив, определенный как char string[6];
, не может содержать строку длиной более 5. Что вам нужно сделать, так это определить достаточно длинный буфер, а затем проверить длину строки после успешного ввода пользователем.
Тем не менее, scanf()
он подвержен переполнению буфера и другим серьезным проблемам, избегайте его для получения пользовательских данных. Используется fgets()
для считывания пользовательского ввода в буфер, его обработки, а затем проверки длины ввода с помощью strlen()
.