Вы возвращаете указатель на конец буфера, а не указатель на начало буфера.Посмотрите на последние две строки функции:
*newStr = '\0';
return newStr;
Очевидно, что это возвращает указатель на ноль char
, то есть пустую строку.
Решите проблему, введя временный указателькоторый вы будете использовать, чтобы пройти через выходной буфер.Затем вы можете вернуть указатель на начало буфера вывода.
char *function(char *s1, char *s2){
int size = strlen(s1) + strlen(s2) + 2;//one for '\n', one for '\0'
char *result = malloc(size);
char *p = result;
while(*s1 != '\0'){
*p = *s1;
p++;
s1++;
}
*p = '\n';
p++;
while(*s2 != '\0'){
*p = *s2;
p++;
s2++;
}
*p = '\0';
return result;
}
Вам также необходимо выделить дополнительный символ для \n
, как показано выше.Наконец, ваш вызывающий код никогда не освобождает память, выделенную function
.