Одна из главных причин, по которой вы все еще видите людей, использующих C-строки в C ++ (помимо незнания о строках или застревания в мышлении C), заключается в том, что std::istream::getline
работает с указателями на символы, а не на строки. Как и огромное количество других частей библиотеки. Одной из причин этого было то, что «вы не платите за то, что не используете». IE: люди, которые просто хотят получить строку текста, не должны создавать экземпляр string
(и, следовательно, также должны использовать другой класс шаблона), чтобы сделать это. Вы можете использовать std::getline
, чтобы получить строки в виде строк, если хотите, но это не очевидно. Поэтому некоторые люди думают, что им все еще нужно использовать буферы символов для получения строки текста.
(Кажется, многое изменилось в C ++ 11, и вы можете использовать string
s во многих местах, где раньше вам приходилось пропускать char*
. Возможно, это немного поможет с Проблема C-in-C ++.)
Стандартные строки и потоки предназначены для защиты от переполнения и более безопасны, чем указатель на символ (по крайней мере, когда они не используются как обычный старый массив / указатель; использование вслепую Итератор str
без учета str.end()
обычно является плохой идеей, но str.push_back()
, str += "text"
, str.at(x)
и операторы вставки / извлечения потока совершенно безопасны). Если вы можете использовать их, я настоятельно рекомендую вам сделать это.