Я бы настоятельно рекомендовал использовать указатели, а не целочисленные индексы, опасаясь переполнения целых чисел. Даже если 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
) зарезервировано для реализации.