Ваша проблема с такими строками ...
char tempPath[] = "";
Это выделит буфер с одним байтом, этот байт будет нулевым символом. В этом буфере нет места для более длинной строки.
По сути, C не имеет динамически изменяемых размеров строк. Он имеет строки с нулевым символом в конце, которые находятся в массивах символов фиксированного размера. Это создает проблему, когда вы, конечно, не будете знать длину строки, пока не закончите ее построение.
Попробуйте что-то вроде ...
char tempPath[5000] = "";
как быстрое решение. Кроме того, ищите strncat - это менее вероятно segfault. Также есть вариант printf, но в настоящее время я использую слишком много C ++.
EDIT
Фактически, segfault, вероятно, происходит из-за того, что strcats и printfs портят стек. Segfault, вероятно, когда функция пытается вернуться. Однако основная проблема заключается в слишком малом количестве строковых буферов.
Упс!
Самое быстрое решение - это ...
char tempPath[5000];
tempPath [0] = 0;
В противном случае он не всегда будет инициализирован пустой строкой, когда вы этого ожидаете.