Вы вызываете неопределенное поведение, записывая за пределы массивов file_name
и out_file
. Когда вы не указываете размер для массива, размер определяется из строки, которую вы используете для его инициализации. Таким образом, это эквивалентно
char file_name[1] = "";
char out_file[4] = "out";
Дополнительный байт для конечного нуля.
Поскольку вы не объявили массивы достаточно большие для строк, в которые вы копируете, вы получите неопределенное поведение.
Вам необходимо объявить размер массивов, достаточно большой, чтобы вместить максимально возможное имя файла. Или используйте malloc()
для определения размера в терминах параметров.
Переменная file_name
не требуется, поскольку это просто копия filename
, и вы можете использовать ее напрямую.
char *outfile = malloc(strlen(filename) + sizeof("out"));
sprintf(outfile, "out%s", filename);
Затем в конце функции выполните
free(outfile);