Недавно я обнаружил, что нужно заменить содержимое std::string
на подстроку. Самая логичная функция, которую я вызываю здесь, я думаю, это следующее: http://www.cplusplus.com/reference/string/string/assign/:
подстрока (2) Строка & assign (const string & str, size_t subpos, size_t sublen);
Копирует часть str, начинающуюся с подпозиции позиции символа, и охватывает сублимированные символы (или до конца строки, если либо str слишком короткая, либо если sublen - string:: npos).ул
Другой строковый объект, значение которого либо скопировано, либо перемещено.subpos
Позиция первого символа в str, который копируется в объект как подстрока. Если это больше, чем длина строки, она выбрасывает out_of_range. Примечание: первый символ в str обозначается значением 0 (не 1).sublen
Длина подстроки, подлежащей копированию (если строка короче, скопировано столько символов, сколько возможно). Значение string:: npos указывает все символы до конца строки.
Однако я не уверен, разрешено ли это, или если оно может испортить строковые данные. Я знаю, что memcpy()
, например, не разрешает (или, по крайней мере, не гарантирует, что в случае некоррупции) будет перезаписываться область памяти (сама часть) (см. memcpy() vs memmove()). Но я не знаю, имеет ли вышеуказанный метод то же ограничение.
В более общем плане, можете ли вы прокомментировать, должен ли я сам выяснить ответ на этот вопрос? Ничто в документации, к которой я привязан, не дает мне понять, каков ответ на этот вопрос, за исключением, возможно, определителя "Другой" в описании параметра str
( "Другой строковый объект" ), который, по-видимому, подразумевает это не может быть этим объектом, хотя я не считаю это однозначным. Это слабость в документации?