Когда вы пишете char* s = "something"
часть постоянной памяти выделяется. Подробнее об этом здесь .
Объявление strcat
выглядит так:
char *strcat( char *dest, const char *src );
По сути, он добавляет src
к dest
, но, поскольку ваш пункт назначения, str1
не имеет достаточно памяти для хранения обеих строк.
Итак, я бы использовал snprintf
с заранее выделенным буфером или:
char *str1 = "United";
char *str2 = "Front";
char *buf = calloc(strlen(str1) + strlen(str2) + 1, sizeof(char));
strncpy(buf, str1, strlen(str1));
strncat(buf, str2, strlen(str2));
printf("%s", buf);
Или с snprintf
:
char *str1 = "United";
char *str2 = "Front";
int buf_len = strlen(str1) + strlen(str2) + 1;
char *buf = calloc(buf_len, sizeof(char));
snprintf(buf, buf_len, "%s%s", str1, str2);