Функция cin добавляет нулевое значение в конце ввода?

Если я объявлю массив символов: char arr[200]
а затем я впоследствии использую функцию cin для чтения значений в arr[200]
и я набираю в командной строке: abcd

Есть ли нулевое окончание: \0 автоматически добавляется в массив в конце ввода?

(Я так не думаю, потому что я проверял это с помощью функции cin: cin >> abcd)

Может кто-нибудь объяснить мне, почему?

Ниже приведен фрагмент моего кода, который я использую для тестирования

    char arr[200]
int count=0;
int i=0;
cin>>arr // i type into command window:abcd

while (arr[i] != '\0')
{
count++;
i++}

Мой счетчик будет не 4, а как 43, поэтому я пришел к выводу, что массив символов не завершается нулем после функции cin

-1

Решение

Форматированный ввод из std::istream в массив символов завершит ввод нулем, как указано в C ++ 11 27.7.2.2.3 / 9:

operator>> затем сохраняет нулевой байт (charT()) в следующей позиции

Размещенный вами код дает ожидаемый результат после исправления очевидных синтаксических ошибок. Но будьте осторожны, это очень опасно; нет никакой проверки длины массива, поэтому слишком много входных данных переполнит его. Я настоятельно рекомендую вам использовать std::string класс, а не массивы простых символов, для управления строками.

Код, который вы разместили в комментарии через ссылка на сайт выглядит так:

char array[20];
int length=getlength(array);
cin>>array;

чтение в массив после Попытка измерить длину строки неинициализированного массива. Это может привести к какому-либо результату, или сбою, или вызвать любой другой пример неопределенного поведения.

В будущем вы должны убедиться, что код, который вы публикуете в своем вопросе, — это тот же код, который демонстрирует поведение, о котором вы спрашиваете; в противном случае невозможно ответить на вопрос.

3

Другие решения

Да, вход будет нулевым. В противном случае вы не сможете, например, напечатать его без печати случайных символов после ввода.

0