Некоторые люди, похоже, считают, что функция C strcpy() плохая или злая. Хотя я признаю, что обычно лучше использовать strncpy(), чтобы избежать переполнения буфера, следующее (реализация функции strdup() для тех, кому не повезло иметь его) безопасно использует strcpy() и никогда не должно переполняться:/p >
char *strdup(const char *s1)
{
char *s2 = malloc(strlen(s1)+1);
if(s2 == NULL)
{
return NULL;
}
strcpy(s2, s1);
return s2;
}
*s2 гарантированно имеет достаточно места для хранения *s1, а использование strcpy() избавляет нас от необходимости хранить результат strlen() в другой функции, которая будет использоваться позже как ненужный (в данном случае) параметр длины до strncpy(). Однако некоторые люди пишут эту функцию с помощью strncpy() или даже memcpy(), для которых оба требуются параметр длины. Я хотел бы знать, что люди думают об этом. Если вы считаете, что strcpy() безопасен в определенных ситуациях, скажите так. Если у вас есть веская причина не использовать strcpy() в этой ситуации, пожалуйста, дайте это - я хотел бы знать, почему лучше использовать strncpy() или memcpy() в подобных ситуациях. Если вы считаете, что strcpy() в порядке, но не здесь, пожалуйста, объясните.
В принципе, я просто хочу знать, почему некоторые люди используют memcpy(), когда другие используют strcpy(), а третьи используют plain strncpy(). Есть ли какая-либо логика для предпочтения одного над тремя (без учета проверок буфера первых двух)?