Если я объявлю массив символов: 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
Форматированный ввод из std::istream
в массив символов завершит ввод нулем, как указано в C ++ 11 27.7.2.2.3 / 9:
operator>>
затем сохраняет нулевой байт (charT()
) в следующей позиции
Размещенный вами код дает ожидаемый результат после исправления очевидных синтаксических ошибок. Но будьте осторожны, это очень опасно; нет никакой проверки длины массива, поэтому слишком много входных данных переполнит его. Я настоятельно рекомендую вам использовать std::string
класс, а не массивы простых символов, для управления строками.
Код, который вы разместили в комментарии через ссылка на сайт выглядит так:
char array[20];
int length=getlength(array);
cin>>array;
чтение в массив после Попытка измерить длину строки неинициализированного массива. Это может привести к какому-либо результату, или сбою, или вызвать любой другой пример неопределенного поведения.
В будущем вы должны убедиться, что код, который вы публикуете в своем вопросе, — это тот же код, который демонстрирует поведение, о котором вы спрашиваете; в противном случае невозможно ответить на вопрос.
Да, вход будет нулевым. В противном случае вы не сможете, например, напечатать его без печати случайных символов после ввода.