На самом деле strcat(dest, src)
выполняет поиск нулевого байта, начинающегося с dest
и продолжающегося вперед, а затем записывает туда строку src
.
После malloc
содержимое памяти не определено, поэтому ваш текущий код может сделать любое количество вещей, большинство из которых неверны. Если вы делаете concat[0] = 0
до strcat
, то ваш код работает, но вам придется искать длину str1
три раза - один раз для strlen
, снова для первого strcat
и последний для второго strcat
.
Вместо этого я рекомендую использовать memcpy:
size_t len1 = strlen(str1), len2 = strlen(str2);
char *concat = (char*) malloc(len1 + len2 + 1);
memcpy(concat, str1, len1);
memcpy(concat+len1, str2, len2+1);
Это использует тот факт, что с самого начала вы знаете, куда нужно поместить байты обеих строк и сколько их существует.