dest
и source
никогда не станет '\0'
, если они не равны нулю, чтобы начать с (или, возможно, после того, как долгое время, чтобы быть правильным, но вы будете probalby запустить из памяти задолго до этого).
Вы должны использовать:
while(*dest != '\0'){
dest++;
}
while(*src != '\0'){
*dest++ = *src++;
}
проверить значения под указателями.
Есть некоторые другие проблемы:
Как уже отмечалось другими: src
должен быть const pointer
тоже.
Это следует сделать это:
char *strcat(char *dest, const char *src)
{
char *start_pos = dest;
while(*dest != '\0')
dest++;
while(*src != '\0')
*dest++ = *src++;
*dest = '\0';
return start_pos;
}
мелочью: Я бы дал этой FUNTION другое имя, чем стандарт, используемый strcat()
.
Вы хотите, чтобы проверить, значения, обозначенные 'dest' и' src', являются нулевыми терминаторами, а не самими указателями. Итак, 'while (* dest)' и 'while (* src)'. Также рассмотрим make 'src' указатель на const, например:' const char * src'. – szczurcio
В дополнение к проблеме @szczurcio, вам нужно NULL-завершить строку 'dest', а также сохранить исходное значение' dest', чтобы оно могло быть возвращено. –
Почему -1? Это может быть неправильный код, но проблема четко определена, с хорошо отформатированным образцом источника. –