Сравнение строки и указателя на строку в C

Я написал функцию my_strcat, которая дописывает в конец строки s1 строку s2:

char *my_strcat(char * restrict s1, const char * restrict s2) 
{
    char *s1_ptr = s1;
    while (*s1_ptr != '\0')
    {
        s1_ptr++;
    }
    while (*s2 != '\0')
    {
        *s1_ptr = *s2;
        s1_ptr++;
        s2++;
    }
    *s1_ptr = '\0';
    return s1;
}

Для тестировки корректности работы функции я хочу вызвать assert:

int test_strcat(){
    char s1[] = "United";
    char s2[] = "States";
    assert(my_strcat(s1, s2) == "UnitedStates");
}

Вроде бы всё должно работать правильно, но assert постоянно выдаёт ошибку. Думаю, что я где-то напортачил с указателями и из-за отсутствия опыта работы с ними не могу разобраться. Помогите, пожалуйста


Ответы (2 шт):

Автор решения: Igor

То есть я уже угадал. К assert-у это не имеет никакого отношения. Когда Вы дошли до конца s1 и начинаете дописывать *s1_ptr = *s2; - в какую память это пишется?


Значит можно передать в сравнение именно указатель

Ну вот Вы и сравнили указатели. Они одинаковые?

strcmp

→ Ссылка
Автор решения: Optimus1

А на каком основании Вы считаете, что Ваш код должен работать правильно?

Если Вы не выделяете дополнительной памяти в s1 под копирование чаров из s2.

После того, как вы нашли '\0' в s1 - память в s1 закончилась и все что за этим '\0' - Вам не принадлежит. Вы пишите в область памяти, которую вы не выделяли.

→ Ссылка