But there is no such arduino function that adds a value to the array. I can't use a for loop and replace values with "i" because guess would always be 5 characters long and there is no way of pausing the loop if no value is pressed.
The strcat() function appends the src string to the dest string overwriting the '\0' character at the end of dest, and then adds a terminating '\0' character. The strings may not overlap, and the dest string must have enough space for the result.
Returns
The strcat() function returns a pointer to the resulting string dest.
Now you're using String instead of char array. There are plenty of comments advising against using String variables with a low resourced microcontroller such as the 328P.
Since you didn't provide an explicit size, the compiler counted the number of initializers you provided, and came up with 0. So, that statement is EXACTLY the same as
int guess[0];
which anyone can see creates a completely useless array.