Я думал о создании альтернативы strncpy с завершением '\ 0' для собственного использования в файле заголовка, и мне интересно, какой из следующих подходов будет лучше.
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;
}
OR
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 не подойдет так же?
strcopy
? Кроме того, почему вам нужно знать длинуchar *source
с нулевым завершением, чтобы скопировать его? - person CollinD   schedule 27.04.2016dest[run+1]='\0';
--››dest[run]='\0';
(запуск уже увеличивается после цикла) - person wildplasser   schedule 27.04.2016elements-1
символов, игнорируя тот факт, чтоsource
может закончиться задолго до этого. - person AnT   schedule 27.04.2016strncpy
, а неstrcpy
, как вы сказали. - person CollinD   schedule 27.04.2016strncpy
иstrcpy
, а неstrncopy
иstrcopy
. - person Keith Thompson   schedule 27.04.2016s/copy/cpy/g
пожалуйста.#define strcopy strcpy
#define strncopy strncpy
- person CollinD   schedule 27.04.2016strncpy
на самом деле вообще не является строковой функцией, потому что она может не создавать строку (с нулевым завершением) и заполнять назначение нулями, если есть место, в этом случае запись за концом строки. Он предназначен для заполнения массивов символов фиксированного размера, обычно полей структуры. - person hyde   schedule 27.04.2016copystring(char *dest,char *source,int elements)
(2-я версия) резко выходит из строя, когдаelements <= 0
- person chux - Reinstate Monica   schedule 27.04.2016copystring(dest, source, 0)
вызываетstrncpy(dest,source,0-1);
, что являетсяstrncpy(dest,source,some_very_large_number);
, а неstrncpy(dest,source, -1);
- person chux - Reinstate Monica   schedule 27.04.2016