Массив, который вы создаете, полон случайных данных. C ++ выделит пространство для данных, но не инициализирует массив с известными данными. Strcat прикрепит данные к концу строки (первый '\ 0'), так как массив символов не был инициализирован (и заполнен случайными данными), это не будет первый символ.
Это можно исправить, заменив
char first_name[40],last_name[40],full_name[80],space[1];
с
char first_name[40] = {0};
char last_name[40] = {0};
char full_name[80] = {0};
char space[2] = {0};
= {0}
установит первый элемент в '\ 0', который является символом конца строки, а c ++ автоматически заполнит все не указанные элементы '\ 0' (при условии, что указан хотя бы один элемент).