strncpy – очистка буфера в большинстве случаев не используется

man strncpy:
“If the length of src is less than n, strncpy() pads the remainder of dest with null bytes.”
В большинстве случаев в этом нет необходимости, а производительность падает, особенно если буфер выделен с большим запасом.

У этой функции есть еще пару неудобств:
– strncpy требует правильной “обвязки”

strncpy(buf, str, n);
if (n > 0)
buf[n - 1]= ''

– strncpy возвращает указатель на строку, а не длину хотя последнее бесплатно и в некоторых случаях может быть удобно в вызывающем коде.

strlcpy и strlcat были созданы разработчиками OpenBSD на замену strncpy, strncat. Они используются в том числе в ядре Linux (lib/string.c). Они лишены недостатков strncpy и strncat. Однако позиция Ulrich Drepper, разработчика glibc, относительно этих функций иная [1] – он считает что код использующий строки должен заботиться об их длине и использовать memcpy, а str* функции неоптимальны. Т.е. отказываемся от C strings в пользу Pascal Strings.

1. http://sources.redhat.com/ml/libc-alpha/2000-08/msg00053.html

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s