2015-11-18 4 views
0

всего лишь быстрый вопрос. Я ищу наиболее эффективный и понятный способ получить ввод пользователя любой длины и сохранить его, поэтому я могу получить его и сравнить с другим вводом. Мне также нужно, чтобы пользовательский ввод был завершен с нулевой отметкой. Могу ли я что-то вродеВход пользователя с нулевой остановкой

string inp; 
cin >> inp; 
+3

определить «наиболее эффективными»? –

+5

Если у вас в строке есть пробелы, вам нужно будет использовать ['std :: getline'] (http://en.cppreference.com/w/cpp/string/basic_string/getline) – NathanOliver

+0

наиболее эффективным я имею в виду вход с нулевым завершением. Является ли строка-объект нулевым, если я попрошу ввести пользователя, или мне придется добавить '\ 0' вручную? – trollpidor

ответ

3

писать А std::string будет управлять собой и расти, чтобы приспособить вход, который дается в программе. Если у вас есть

std::string input; 
std::getline(std::cin, input); 

Это позволит получить информацию от пользователя, которая содержит пробелы, которые могут быть такими большими, как входной поток может удерживаться. Теперь, когда у вас есть строка, если вам нужно передать ее некоторой функции, для которой требуется старая строка c-style с нулевым завершением, вы должны использовать функцию c_str(). c_str() действительно возвращает const char *, поэтому вы не сможете изменить строковые данные с ним.

Если вам действительно нужна modifyable строка с стилем, то вы можете сделать один с

char * old_style_string = new char[input.size() + 1]; 
std::strcpy(old_style_string, input.c_str()); 
+0

получил это, я был немного смущен, потому что, хотя по какой-то причине строка C++ также заканчивается нулем, как строка c. Но это в основном вектор с немного другой функциональностью. Спасибо – trollpidor

+0

@trollpidor В принципе. Если вы просто имеете дело с 'std :: string', вам не нужно беспокоиться о терминаторе NULL. – NathanOliver

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