Я пытаюсь получить строковый ввод от пользователя, используя fgets
, но fgets не дождался ввода и после наложения денег. Я узнал о функции gets
, которая, кажется, работает нормально. Мои вопросы: 1. Почему gets
работает, когда я вводил более 10 символов, если я объявил массив из десяти элементов. Вот мой кодИспользование «получает» для ввода строки в C
#include<stdio.h>
int main(void){
char name[10];
printf("Please enter your name: ");
gets(name);
printf("\n");
printf("%s", name);
return 0;
}
мой вход при тестировании: morethantenletters
выход будет:
Конечно, это должно было бы вызвать некоторые ошибки «morethantenletters», нет? Поскольку name
составляет всего десять элементов.
2. Мой следующий вопрос: мой код также работает, когда я использую gets(&name)
вместо gets(name)
. - Я не понимаю, почему. &name
отправляет адрес name
.
пока name
просто отправляет его значение, нет?
Никогда не используйте gets(). Он не защищает от переполнения памяти. – seand
'fgets' ждет ввода. – woolstar
Блокировка не является проблемой; как fgets(), так и gets() соответственно для ввода. Проблема в gets() не имеет способа узнать, сколько места доступно в целевом char *. – seand