char *wyraz1 = " ";
char *wyraz2 = "Jakikolwiekwyraz";
Nigdy tak nie rób. W ten sposób przypisujesz do wskaźnika, który pozwala na zmianę wartości danych komórek w pamięci, obszar danych statycznych. Tablice znakowe, które są wpisane w kod, nie posiadają "miejsca" w pamięci. Nie można tak robić. Jak zatem...?
Albo w taki sposób:
char *wyraz1 = malloc(ILE_ZNAKOW1 * sizeof(char));
char *wyraz2 = malloc(ILE_ZNAKOW2 * sizeof(char));
strcpy(wyraz1, " ");
strcpy(wyraz2, "Jakikolwiekwyraz");
Albo tak:
char wyraz1[ILE_ZNAKOW1] = " ";
char wyraz2[ILE_ZNAKOW2] = "Jakikolwiekwyraz";
I teraz możesz użyć bezpiecznie strcat().