как работает функция cin.get ()? - PullRequest
0 голосов
/ 08 марта 2020

Я хотел бы знать, как работает функция cin.get ()?

Например, у меня есть массив символов из 256 символов. Если вход содержит менее 256 символов, что тогда содержат «пустые» элементы массива? Каждый неиспользованный элемент равен '\ 0' или как?

Заранее спасибо, Янис

Ответы [ 4 ]

1 голос
/ 08 марта 2020

Например, у вас есть простой код, и вы ввели строку "ex: Hello world!" следующим образом:

char str[256]; // Uninitialized variable
std::cin.get(str, 256);

Результат:

Тот же код, но с инициализированной переменной:

char str[256] = {}; // Initialized variable
std::cin.get(str, 256);

Результат:

0 голосов
/ 08 марта 2020

get() - перегруженная функция класса basic_istream. Предполагая, что вы называете это как:

cin.get(array, size)

Тогда он заполнит до size - 1 символов в массиве. Остальные остаются неизмененными, поэтому вы не можете знать, какое значение они имеют.

0 голосов
/ 08 марта 2020

Если вход содержит менее 256 символов, что тогда содержат «пустые» элементы массива? Является ли каждый неиспользуемый элемент '\ 0' или как?

Это зависит.

Глобальные переменные и переменные stati c инициализируются по умолчанию. Локальные переменные неинициализированы - если вы явно не инициализируете их.

char buf1[256]; // global variable, all zeroes

int main() {
    char buf2[256]; // uninitialized memory
}

Чтение из buf1 имеет хорошо определенное поведение, а чтение из buf2 - нет, так что если вы std::cin.get(buf2, <some_size>); и читаете из памяти вне \0, который std::cin.get() помещает в ваш массив, ваша программа будет иметь неопределенное поведение .

Чтобы изменить это, вы также можете по умолчанию инициализировать свои локальные переменные:

int main() {
    char buf2[256]{}; // default initialized memory
}
0 голосов
/ 08 марта 2020

Не заполненная часть массива остается нетронутой. Если массив fre sh, обычно вы видите нули, поскольку операционная система обнуляет вновь выделенные страницы. Считайте это артефактом, ожидайте что-нибудь .

...