В качестве дополнительного примечания имейте в виду, что функция strncpy
не подходит для использования, когда вам необходимо выполнить копирование с защитой от переполнения буфера. Эта функция не предназначена для этой цели и никогда не предназначалась для этой цели. strncpy
- это функция, которая была создана давным-давно для выполнения очень специфичного для приложения копирования строк в какой-то очень специфической файловой системе в некоторой старой версии UNIX. К сожалению, авторам библиотеки удалось «похитить» обобщенно звучащее имя strncpy
, чтобы использовать его для этой очень узкой и конкретной цели. Затем он был сохранен для целей обратной совместимости. И теперь у нас есть поколение или два программиста, которые делают предположения о цели strncpy
, основываясь исключительно на ее имени, и, следовательно, используют ее ненадлежащим образом. В действительности, strncpy
имеет очень мало или вообще не имеет смысла.
Стандартная библиотека C (по крайней мере, ее версия C89 / 90) не имеет функции копирования строк с защитой от переполнения буфера. Чтобы выполнить такое защищенное копирование, вы должны использовать какую-либо платформо-зависимую функцию, например strlcpy , strcpy_s или написать ее самостоятельно.
P.S. Этот поток в StackOverflow содержит хорошее обсуждение реальной цели, для которой был разработан strncpy
. См. post специально для точного объяснения его роли в файловой системе UNIX. Кроме того, см. здесь для хорошей статьи о том, как появился strncpy
.
Еще раз, strncpy
- это функция для копирования совершенно другого типа строки - строки фиксированной длины. Он даже не предназначен для использования с традиционными строками в стиле C с нулевым символом в конце.