Я думал о создании альтернативы strncpy с завершением '\ 0' для моего собственного использования в файле заголовка, и мне интересно, какие из следующих подходов были бы лучше.strncpy() альтернатива - какие рекомендации для каждой версии?
int copystring(char *dest,char *source,int elements)
{
int run;
for(run=0;run<elements-1;run++)//last reserved for'\0'
{
dest[run]=source [run];
if (dest[run]=='\0')
{
break;
}
}
dest[elements-1]='\0';//could make conditional but not neccesary.
return 0;
}
ИЛИ
int copystring(char *dest,char *source,int elements)
{
strncpy(dest,source,elements-1);
dest[elements-1]='\0';
return 0;
}
Очевидная разница для меня является то, что я называю один меньше функции с первой версии, но мне было интересно, если версия два имеет каких-либо преимуществ, так как я не знаю, внутренние работы strncpy()
Как в стороне, почему strncpy() принимает size_t в качестве последнего аргумента? если это для передачи значений sizeof, которые будут полезны только в очень ограниченных обстоятельствах, не будет ли int int так же хорошо?
Что это достижения, что 'strcopy' уже не предоставляют? Кроме того, почему вам нужно знать длину «char * source» с нулевым завершением, чтобы скопировать его? – CollinD
У этого есть защита переполнения буфера для dest. i.e я буду использовать «элементы», чтобы передать максимальную длину адресата. – Orangesandlemons
BTW: 'dest [run + 1] = '\ 0';' - >> 'dest [run] = '\ 0';' (запуск уже увеличивается после цикла) – wildplasser