Сравнение строки и указателя на строку в 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 шт):
То есть я уже угадал. К assert-у это не имеет никакого отношения. Когда Вы дошли до конца s1 и начинаете дописывать *s1_ptr = *s2; - в какую память это пишется?
Значит можно передать в сравнение именно указатель
Ну вот Вы и сравнили указатели. Они одинаковые?
А на каком основании Вы считаете, что Ваш код должен работать правильно?
Если Вы не выделяете дополнительной памяти в s1 под копирование чаров из s2.
После того, как вы нашли '\0' в s1 - память в s1 закончилась и все что за этим '\0' - Вам не принадлежит. Вы пишите в область памяти, которую вы не выделяли.