You have not left enough room in fpath1 and fpath2 to concatenate further characters to the strings. If you leave the brackets blank then the size of the char array is determined by the initializing string.
Code:
char s[] = "hello"; // s only has room for 6 chars: 'h','e','l','l','o','\0'
char s[100] = "hello"; // s has room for 100 chars
In your program, the first strcat and printf seem to work because the extra chars are written beyond the actual end of the char array, which is a serious runtime error but is not generally caught by the system.
fname1 and fname2 could just be const char pointers instead of char arrays.
BTW, to be more portable main should return int. Only some systems allow void.
Code:
#include <stdio.h>
#include <string.h>
int main(){
char fpath1[100] = "C:/work/arduino/teraterm-4.106/logs/";
char fpath2[100] = "C:/work/arduino/teraterm-4.106/logs/";
const char *fname1 = "lora-meter.log.1";
const char *fname2 = "lora-meter.log.2";
strcat(fpath1, fname1);
strcat(fpath2, fname2);
printf("fpath1 = %s\n", fpath1);
printf("fpath2 = %s\n", fpath2);
return 0;
}