C does not have strings. Strings, in C, are a convention used by the compiler and the programmer and the Standard Library (and every library ever written). If you break the convention strings no longer "work" even though your code may be correct C code.
Depending on context, a string is a [part of an] array of char that contains a zero byte, or a pointer to such an array, like
char text[3] = {'h', 'i', '\0'}; // text is an array that contains the string "hi"
char *ptr = text; // ptr points to the string "hi"
When you build your string character-by-character, remember the array elements start as garbage
char fin[20]; // fin is an array of 20 characters.
// It is capable of holding string of up to 19 characters length
// and the respective terminator
fin[0] = 'C'; // fin (the whole array) is not a string
fin[1] = '\0'; // fin now is the string "C" with the proper terminator (and a bunch of unused elements
fin[1] = ' '; // replaced the terminator with a space
// fin is no longer a string
fin[2] = 'i';
fin[3] = 's'; // "C is############garbage########..." not a string
fin[4] = ' ';
fin[5] = 'f';
fin[6] = 'u';
fin[7] = 'n'; // "C is fun########garbage########..." not a string
fin[8] = '.'; // "C is fun.#######garbage########..." not a string
fin[9] = '\0'; // "C is fun." <== definitely a string
That's what you need to do. Add a '\0'
at the end.