Некоторые люди, похоже, считают, что функция 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()
. Есть ли какая-либо логика для предпочтения одного над тремя (без учета проверок буфера первых двух)?