Конкатенация строк в C с помощью указателей
Я хочу написать функцию, которая делает конкатенацию строк в C. При этом мне хотелось бы это реализовать при помощи указателей. Я написал вот этот код:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char* concat(char* a, char* b) { //функция конкатенации
char* c = (char*) malloc(sizeof(char)*(strlen(a)+strlen(b)+1)); //выделение памяти для новой строки
for (int i = 0; i < strlen(a); i++){ //задать первым символам результатирующей строки символы первой строки
c[i] = a[i];
}
for (int i = strlen(a); i < strlen(a)+strlen(b); i++){//задать следующим символам результатирующей строки символы второй строки
c[i] = b[i];
}
c[strlen(a)+strlen(b)] = '\0'; //добавить нулевой символ
return c;
}
int main(){ //проверка
char* a = concat("Hello, ", "world!");
for (int i = 0; i < strlen(a); i++){ //распечатка
printf("%c", a[i]);
}
free(a); //освобождение памяти
return 0;
}
Но, к сожалению, он работает не так, как нужно. Он выводит:
Hello, Hello,
Как сделать так, чтобы он не дублировал первую строку, а склеивал две разные?