Обсуждение:Strlcpy

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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.

San АНДРЕЕВ 01:00, 10 января 2011 (UTC)[ответить]