Использовать strncat .
char filepath[1024];
char drive[] = "C:\\", dir[] = "dir\\", file[] = "file.txt";
strncpy(filepath, drive, sizeof(filepath)-1);
strncat(filepath, dir, sizeof(filepath)-strlen(filepath)-1);
strncat(filepath, file, sizeof(filepath)-strlen(filepath)-1);
programConfig = fopen(filepath, "a+");
Обратите внимание, что в этом случае, поскольку путь состоит из строк, известных априори, strcpy / strcat было бы достаточно вместо strncpy / strncat, новсякий раз, когда используется пользовательский ввод, вы обычно должны использовать strncpy / strncat (или даже strlcpy / strlcat, если он доступен), если только вы не распределяете память должным образом динамически.
Также обратите внимание, что использование сортов strncpy / strncat магически не защищает от всехвозможно, уязвимости - обрезая строку, вы можете позволить пользователю получить доступ к чему-то другому, кроме того, что вы проверили: т.е. («c: \ действительно действительно очень длинный путь к файлу \ file.txt» может быть в порядке, когда вы проверяете это, нонапример, strncpy / cat может обрезать его до "c: \ real", что может быть не в порядке).