makeJPEG(nof, chunk[512]);
неверно. Это пытается передать элемент 512 chunk
. Измените его на makeJPEG(nof, chunk);
. Это передает буфер chunk
(по указателю). Ваш компилятор должен был дать вам предупреждение об этом. Если этого не произошло, включите предупреждающие сообщения и обратите на них внимание.
Основной l oop вашей программы продолжает чтение из файла в chunk
и проверяет каждое из них на наличие JPEG , Это не правильно. Только первая часть файла будет иметь индикаторы того, что это JPEG. Чтобы скопировать весь файл, вы должны проверить только первую часть, а затем скопировать всю.
Кроме того, l oop увеличивает nof
, и makeJPEG
открывает новый файл каждый раз, когда он называется. Это позволит записать каждый кусок входного файла во множество различных выходных файлов, что, как правило, бесполезно. Если вы хотите, чтобы ваша программа скопировала один файл JPEG, перепроектируйте его так, чтобы куски записывались в один и тот же файл каждый раз, а не в новый файл. Если вы хотите, чтобы ваша программа обрабатывала много входных файлов, вам нужно изменить ее другими способами.
Это бесполезно: sizeof(chunk) == (sizeof(char) * 512)
. Размер chunk
всегда равен размеру, который был определен, 512 байт.
Это необходимо изменить: fread(chunk, sizeof(char), 512, file) == 512
. Вам необходимо использовать result = fread(chunk, sizeof chunk, 1, file)
, где result
ранее объявлено с типом size_t
. Тогда вам нужно проверить result
. Если это 512 байт, у вас есть полный блок, и вы должны записать его в выходной файл и l oop для обработки большего количества фрагментов. Если он равен нулю, данные больше не могут быть прочитаны, и вы закончили с этим файлом (кроме особых обстоятельств, которыми мы можем пока пренебречь). Если оно находится между 0 и 512, вы получите частичный фрагмент, который, вероятно, является концом файла. Вам следует записать его в выходной файл, после чего вы закончите работу с этим входным файлом (за исключением особых обстоятельств).