Я хочу заполнить p всеми символами в s1 и s2, но этот код просто ничего не возвращает.Можно использовать некоторую помощь.
Вы начинаете с указателя malloc, а затем увеличиваете p
по мере продвижения.
В конце процедуры, что бы вы сделалиожидайте, что это p будет указывать на?
При таком подходе вам нужно будет запомнить указатель, который у вас был malloc'd, и вернуть его.
Вы можете обнаружить, что если вы дадите свои переменныеболее значимые имена - по крайней мере, при запуске - вы можете рассуждать об этом лучше.
Кроме того, поскольку вы не изменяете входные данные, вы должны пометить их как const
.Это лучше сообщает ваше намерение - и дает проверку во время компиляции того, что вы на самом деле пытаетесь выполнить.Это особенно важно, если вы собираетесь повторно использовать такое имя, как strcat, которое имеет ожидания.(Повторное использование этого имени - это еще одна вещь, которую вы можете пересмотреть.)
char *my_strcat(const char* s1, const char* s2)
{
char* result = malloc(strlen(s1) + strlen(s2) + 1);
// To satisfy @P__J__ I will expand on this by saying that
// Your interface should document what the behavior is when
// malloc fails and `result` is NULL. Depending on the
// overall needs of your program, this might mean returning
// NULL from my_strcat itself, terminating the program, etc.
// Read up on memory management in other questions.
char* dest = result;
while (*s1 != '\0')
*dest++ = *s1++;
while (*s2 != '\0')
*dest++ = *s2++;
*dest++ = '\0';
return result;
}