Функция fread возвращет неверное значение

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Norfolk
Сообщения: 4
Зарегистрирован: 07 апр 2013, 19:23

Помогите пожалуйста

Считываю с файла с 75 байтами

len=fread(M,1,64,org);
В буфер записывается все 64, но len возвращает 40


Скажите пожалуйста в чём может быть ошибка
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

If an error occurs, or the end of the file is reached, the return value is a short item count (or zero).

fread() does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3) to determine which occurred.
из мана.

Если бы ты скинул работающий код, в котором повторяется описаная ситуация и пример файла с которого считываешь, МБ можно было помочь лучше )
Приглашаю на свой блог о программировании: pro-prof.com
Norfolk
Сообщения: 4
Зарегистрирован: 07 апр 2013, 19:23

Вот функция:

Код: Выделить всё

void FileWork(unsigned char K[8][16], FILE* org, FILE* conc){
	unsigned char M[64];
 	int len;
	while(len=fread(M,1,64,org)){
		PolyPod(K,M,len);
		fwrite(M,1,len,conc);
	}
}
До этого org открывал:

Код: Выделить всё

FILE* org=fopen("D:\\text1.txt","rb");
Файл прикрепил)
Вложения

[Расширение txt было запрещено, вложение больше недоступно.]

Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

я просил минимальный работающий код, который показывает что что-то там работает не так.
что делает ваш полипод я понятния не имею, может быть дело в нем?
Считываю с файла с 75 байтами
в прикрепленном файле 117 байт
В буфер записывается все 64, но len возвращает 40
в примере вы считываете в цикле, т.е. мб первый раз считывается 64, в во второй раз то, что осталось, МБ там и осталось 40 (в том файле, накотором вы реально это проверяли)

Минимальный пример вот:

Код: Выделить всё

#include <cstdlib>
#include <cstdio>
int main() {
	FILE *org = fopen("text1.txt","rb")
		, *conc = fopen("text2.txt", "w+b");
	
	unsigned char M[64];
	int len;
	
	len = fread(M, 1, 64, org);
	fwrite(M, 1, len, conc);
	
	printf("%d\n", len);
	
}
и все работает, на экран выводит 64 (столько байт считано и записано) и в файл копируется тоже ровно 64 байта.
скриншот прикрепил
Вложения
1..png
Приглашаю на свой блог о программировании: pro-prof.com
Ne0N
Сообщения: 6
Зарегистрирован: 28 мар 2013, 14:39

имхо автора топика сбила разная система счисления - он пытается считать 64, а в дебагере видит, что считалось 40. Только вот 40 в шестнадцатиричной системе счисления = 64 в десятичной.
Norfolk
Сообщения: 4
Зарегистрирован: 07 апр 2013, 19:23

16-ричная система..
Протупил так протупил
Спасибо за то, что откликнулись)
Ответить