Другие языки программирования и технологии

Строки какого типа предпочтительнее использовать в С++?

Символьные массивы, в качестве строк:
text[ ] = "Any text"
text[ ] = 't', 'e','x','t','\0'

Или же объекты string:
string text = "Any text"

Я использую объекты string, ибо проще использовать, а также можно их использовать как символьный массив (например, для доступа к отдельным символам).

Но в учебнике большинство примеров почему-то написаны с применением строк - символьных массивов, в стиле С.
Есть ли какая-нибудь объективная причина для использования строк - массивов символов?
Или я могу не беспокоиться, и дальше использовать класс string?
Руслан 7282
Руслан 7282
2 508
Тоже постараюсь объяснить, если конечно ...
Конечно применение string - намного легче и почти можно ни о чём не думать!
Но вот какая здесь засада! Если не зная основ работы с символьными массивами, Вы научитесь работать только со string, и тогда могут возникнуть сложности на string (не спрашивайте какие, просто поверьте - могут) и вариант с char окажется эффективней. Кто-то, знающий char и string, просто окажется конкурентноспособней Вас, ну и отсюда все последующие выводы.
А похожих примеров из других тем - куча, не даром многие знающие здесь смеются или даже иногда издеваются (сам такой, каюсь) над глупыми вопросами и т. п.
Суть такова: используйте string, но попрактиковаться с char тоже бы очень не помешало!
Но лично я сам string пытаюсь избегать по возможности!
Mаксим Сапожников
Mаксим Сапожников
76 473
Лучший ответ
Сколько лет учебникам?
Учебники учитывают все операционки и стандарты, но не всегда успевают за стандартами.
(я Сишник и мне удобнее массивы чаров. тем кто Плюсоиды удобнее стринги (в Сях их просто нет, они появились в плюсах) - тут уж "кому что привычнее")
Используйте дальше string. Так как использование символьного массива может привести как минимум к уязвимостям. Да и string больше подходит для ООП
Учебники, как правило для начинающих, пишутся изначально с позиции С, т. е. структурного программирования, ибо нетронутому мозгу лучше подавать алгоритмику, не отвлекаясь на абстракции вроде ООП, да и универсальность - зачем писать два разных учебника, подходящих для С или С++? Ко всему, это дает прочувствовать операции на довольно низком уровне. Как, по вашему, объяснить человеку, не знакомому с char-строками и существованием нуль-символа, почему слово из 3х символов (ANSII) занимает 4 байта?

Однозначно, std::string тут лидер (и его вариации для других библиотек, вроде CString для MFC, QString для Qt и т. п.).
Класс string появился в библиотеке std. Уже давно все компиляторы имеют эту библиотеку. В первых версиях компиляторов ее не было. Используйте класс string как вам удобнее, никаких проблем не будет, если только это не компилятор 80-х годов.
Сергей セルゲイ
Сергей セルゲイ
4 641