Страница 1 из 1

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

Добавлено: 07 апр 2013, 19:31
Norfolk
Помогите пожалуйста

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

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


Скажите пожалуйста в чём может быть ошибка

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

Добавлено: 08 апр 2013, 06:26
rrrFer
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.
из мана.

Если бы ты скинул работающий код, в котором повторяется описаная ситуация и пример файла с которого считываешь, МБ можно было помочь лучше )

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

Добавлено: 08 апр 2013, 10:01
Norfolk
Вот функция:

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

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");
Файл прикрепил)

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

Добавлено: 09 апр 2013, 03:32
rrrFer
я просил минимальный работающий код, который показывает что что-то там работает не так.
что делает ваш полипод я понятния не имею, может быть дело в нем?
Считываю с файла с 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 байта.
скриншот прикрепил

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

Добавлено: 09 апр 2013, 16:01
Ne0N
имхо автора топика сбила разная система счисления - он пытается считать 64, а в дебагере видит, что считалось 40. Только вот 40 в шестнадцатиричной системе счисления = 64 в десятичной.

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

Добавлено: 09 апр 2013, 20:42
Norfolk
16-ричная система..
Протупил так протупил
Спасибо за то, что откликнулись)