Ответы с форумов MSDN

C++ ошибка fread

Date: 13.10.2019 8:13:23

Попробуйте добавить проверку ошибок fsetpos/fread,  как-то так:

#include <stdlib.h>
#include <stdio.h>

int main( int argc, char *argv[] )
{
	const fpos_t newPos = 1000; 
	const size_t count = 4096; 
	char data[count];
	size_t readcount;
	int result;

	FILE* handle = fopen("D:\\Test\\File.txt","rb"); 

	result = fsetpos( handle, &newPos  );
	if(result!=0) printf("fsetpos failed: %d\n",result);
	
	readcount = fread( data, 1, count, handle ); 
	if(readcount < count) {
		result = ferror(handle);
		if(result!=0) printf("fread failed: %d\n",result);
	}
	else {
		printf("fread success: %d bytes read\n",(int)readcount);
		printf("data: [%.20s]\n",data);
	}
	
	const fpos_t nextPos = 2000; 
	const size_t nextCount = 1000; 
	result = fsetpos( handle, &nextPos );
	if(result!=0) printf("fsetpos failed: %d\n",result);

	readcount = fread( data, 1, nextCount , handle ); 
	if(readcount < nextCount) {
		result = ferror(handle);
		if(result!=0) printf("fread failed: %d\n",result);		
	}
	else {
		printf("fread success: %d bytes read\n",(int)readcount);
		printf("data: [%.20s]\n",data);
	}
	fclose(handle);
    getchar();
}

И покажите, что выведется у вас. 

>Буду признателен, если вы сообщите: о моем возможно неправильном использовании библиотеки; когда будет исправлена бага; в какой версии SDK проблемы не наблюдается.

Universal CRT - компонент Windows, который обновляется вместе с Windows Update, поэтому тут скорее важна версия Windows, чем SDK. SDK предоставляет лишь заголовочные файлы и библиотеки импорта. Но я лично сомневаюсь, что в функции fread Universal CRT может быть баг - это было бы слишком болезненно очевидно, так как >50% программ зависят от нее и соответственно работали бы работали неправильно.


Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub