Как уже указывалось в комментариях, string3
не должно быть снова объявлено внутри функции add_on()
.
Здесь - некоторая справочная информация о области видимости переменных в C.
В дополнение к этому, было бы чище free
выделенной памяти перед завершением и довернуть значение из main
.
int add_on(void);
char* string1 = "hello ";
char* string2 = "world ";
char* string3;
int main()
{
add_on(); // calling add_on();
printf("%s\n", string3); // print
free(string3);
return 0;
}
int add_on()
{
string3 = (char*)malloc(1 + strlen(string1) + strlen(string2));
strcpy(string3, string1);
printf("This is string 3: %s\n", string3);
strcat(string3, string2);
printf("This is string 3: %s\n", string3);
return 0;
}