Существует ли точный эквивалентный strncpy в стандартной библиотеке C ++?
Я, конечно, надеюсь, что нет!
Я имею в виду функцию, которая копирует строку из одного буфера в другой, пока не достигнет завершающего 0?
Ах, но это не то, что делает strncpy()
- или, по крайней мере, это не все , что делает.
strncpy()
позволяет вам указать размер, n
, целевого буфера и копировать не более n
символов. Это нормально, насколько это возможно. Если длина исходной строки («длина», определяемая как число символов, предшествующих завершающему '\0'
) превышает n
, целевой буфер дополняется дополнительными \0'
с, что редко бывает полезно. И если длина, если исходная строка превышает n
, то окончание '\0'
не копируется .
Функция strncpy()
была разработана для того, чтобы ранние системы Unix хранили имена файлов в записях каталога: в виде 14-байтового буфера фиксированного размера, который может содержать до 14-символьного имени. (РЕДАКТИРОВАТЬ: Я не уверен на 100%, что было фактической мотивацией для его дизайна.) Возможно, это не строковая функция, и это не просто "более безопасный" вариант strcpy()
.
Вы можете получить эквивалент того, что можно предположить strncpy()
(с именем), используя strncat()
:
char dest[SOME_SIZE];
dest[0] = '\0';
strncat(dest, source_string, SOME_SIZE);
Это всегда '\0'
определяет конечный буфер и не будет напрасно заполнять его дополнительными '\0'
байтами.
Вы действительно ищете std::string
эквивалент этого?
РЕДАКТИРОВАТЬ: После того, как я написал выше, я разместил эту напыщенную речь в моем блоге.