Строки string STL null-terminated?
Как лучше и правильно делать контроль на конец строки?
Каждый раз при увеличении индекса сравнивать со string.size()?
Михаил
MNK> Добрый день!
MNK> Строки string STL null-terminated?
MNK> Как лучше и правильно делать контроль на конец строки?
MNK> Каждый раз при увеличении индекса сравнивать со string.size()?
c_str()
--
john, http://john.kak-sam.to
MNK> Строки string STL null-terminated?
В каком смысле? Легальные способы доступа непосредственно к сождержимому
'std:string' (итераторы, индексный доступ) позволяют доступаться только к
"значащим" символам строки, т.е. к символам в диапазоне 0..length()-1.
Соответственно, вопроса о terminated при таком доступе в принципе быть не
может - строка std::string по своей природе никак не является terminated
строкой, а является строкой с хранимой длиной.
Получать указатели на элементы строки и затем пытаться рассматривать результат
как C-строку не является легальным способом досупа к std::string
std::string s;
...
char* lpsz = &s[0];
printf("%s", lpsz); // <- не легально
хотя бы потому, что никто не гарантирует, что строка хранится в непрерывном
блоке памяти. А также потому, что никто не гарантирует пристутствия
нуль-терминатора.
std::string можно _сконвертировать_ в нуль-терминированную С-строку методом
'c_str()', но в общем случае при этом специально создается отдельная копия
исходной строки.
MNK> Как лучше и правильно делать контроль на конец строки?
MNK> Каждый раз при увеличении индекса сравнивать со string.size()?
Если выполняется индексный доступ, то да - "каждый раз при увеличении индекса
сравнивать со string.size()". Или что-то подобное.
Best regards, Андрей
AT> std::string можно _сконвертировать_ в нуль-терминированную С-строку методом
AT> 'c_str()', но в общем случае при этом специально создается отдельная копия
AT> исходной строки.
это где такая бредовая реализация?!
--
john, http://john.kak-sam.to
AT>> std::string можно _сконвертировать_ в нуль-терминированную С-строку
AT>> методом 'c_str()', но в общем случае при этом специально создается
AT>> отдельная копия исходной строки.
jg> это где такая бредовая реализация?!
"Бредовая реализация" - это конкретный случай. Я же веду речь об общем случае.
Best regards, Андрей
MNK> Строки string STL null-terminated?
Hет, там можно хранить всё.
MNK> Как лучше и правильно делать контроль на конец строки?
MNK> Каждый раз при увеличении индекса сравнивать со string.size()?
Вероятнее всего, тело этой ф-ции сожержится в хедере, представляет собой
лишь { return size; } и заинлайнится при компиляции, так что сравнение
с string.size() будет выполняться не медленнее, чем самого символа с '\0'
Тимур.