Обсуждение:Strlcpy
Эта статья тематически связана с вики-проектом «Информационные технологии», цель которого — создание и улучшение статей по темам, связанным с информационными технологиями. Вы можете её отредактировать, а также присоединиться к проекту, принять участие в его обсуждении и поработать над требуемыми статьями. |
Untitled[править код]
strlcpy является производительной заменой стандартной функции strncpy только в том случае, когда размер целевого буфера существенно больше длины исходной строки. Если исходный и целевой буферы сопоставимых размеров, то strlcpy работает существенно медленнее strncpy, причём разница растёт в пользу strncpy при увеличении размеров буферов.
В доказательство можно сравнить результат работы двух простеньких программок (при помощи GNU/Linux time(1)):
/* strlcpy.c */
#include <sys/types.h>
#include <string.h>
char src[50] = "1234567890qwertyuiopasdfghjkl;zxcvbnm,./qazwsxedc\0";
char dst[50];
int i = 1000000;
int main() {
while (0 < i) {
strlcpy(dst, src, 50);
i--;
}
return 0;
}
/* strncpy.c */
#include <sys/types.h>
#include <string.h>
char src[50] = "1234567890qwertyuiopasdfghjkl;zxcvbnm,./qazwsxedc\0";
char dst[50];
int i = 1000000;
int main() {
while (0 < i) {
strncpy(dst, src, 50);
i--;
}
return 0;
}
Про важное уточнение можно прочесть, например, в разделе Performance из http://www.gratisoft.us/todd/papers/strlcpy.html.