Я бы настоятельно рекомендовал использовать указатели, а не целочисленные индексы, из-за опасений целочисленного переполнения. Даже если size_t
имеет то же количество битов, что и char *
, вы добавляете индексы, а не указатели.
Думаю, это более или менее академично; если вы вызываете strcat()
для многогигабайтных строк, у вас, вероятно, будут всевозможные проблемы.
Вот версия на основе указателя, для полноты картины:
char *
my_strcat(char *dest, const char *src)
{
char *rdest = dest;
while (*dest)
dest++;
while (*dest++ = *src++)
;
return rdest;
}
Конечно, для возвращаемого значения rdest
требуется еще один указатель, но я думаю, что это хороший компромисс.
Также обратите внимание, что вы не можете легально определить функцию с именем strcat()
в обычном коде приложения; все это пространство имен (общедоступные функции с именами, начинающимися с str
) зарезервировано для реализации.
person
unwind
schedule
22.03.2010
dest
илиsrc
является нулевым. - person mpez0   schedule 22.03.2010