2012-04-02 4 views
3

Я пытаюсь выполнить резервное копирование в своем программировании и узнать что-то, что я как-то пропустил (если только я не понимаю проблему). Я пытаюсь предложить пользователю ввести имя проекта, и я хочу сохранить это имя в переменной. Обычно я использовал бы getline() или std::cin >> std::string some_string, но задание просит меня сделать это без использования строк. «Вы не можете использовать класс строк - вместо этого используйте символы массива». В этом и заключается вопрос: как взять пользовательский ввод и сохранить его в массиве символов?Пользовательский ввод, хранящийся в массиве char (C++)

Пользователь должен ввести слово, а затем нажать Enter ... Как я могу захватить это в массив символов? Если бы слово приходило в один символ за раз, я мог просто добавить его в массив, динамически расширяя, если нужно, но когда он входит в блок char, я теряюсь для идей. Благодаря!

ответ

5

Функция-член cin.getline() позволяет указать буфер символов и длину.

char name[32]; 
cin.getline(name, 32); 

Хотя любой C++ задание, которое будет просить вас специально для использования символьных массивов вместо строк (особенно в данном контексте), является подозреваемым.

+0

'cin.getline (имя, SizeOf (имя));' – karlphillip

+1

@karl: Опасный, потому что если 'name' изменяется на указатель, он по-прежнему будет собираться, но делает неправильная вещь. –

+0

Конечно, но это предложение идет рука об руку с тем, что указано в ответе. Если @Chad использовал указатели, я бы не оставил свой предыдущий комментарий. :) – karlphillip

0

Попробуйте это:

char arr[100]; 
cin >> arr; 
+0

Ужасная идея. Никакой способ гарантировать, что буфер не будет переполняться. Такие вещи приводят к ошибкам в будущем. –

+1

Примечание: вы должны ** никогда ** делать это после завершения этого курса программирования. Вы создали переполнение буфера, что является основной причиной различных ошибок безопасности. –

+0

Вызовите 'cin.width (100);' заранее. –

Смежные вопросы