Чтение файлов с использованием fseek, fread и указателей
Я пытаюсь манипулировать изображениями с помощью c, и пытаюсь полностью понять fseek()
и фред()
механизмы.
Зачем fseek
не изменил адрес точки, даже это повлияло на fread
функционировать, но не изменить адрес точки или увеличить его?
Вот простой пример
int main()
{
char *x[5]={"axxxx","aaaa","hxxx","rrrrr","xsdsdd"};
char *point=x;
char buffer[65]={0};
fread(buffer,6,1,point); //Here fread copy "axxx"
fseek(point,5,SEEK_CUR); //Here fseek increase point by five bytes
fread(buffer,6,1,point); // Here fread do nothing copy nothing
printf("%s\n",buffer); // buffer contain "axxx" first fread call
printf("%x\n",point); // point address did not changed because of fseek
printf("%x",x); //x still the same as point pointer
return 0;
}
1 ответ
Решение
fread
должен взять FILE *
аргумент для 4-го параметра. Вы даете "char *".
Что вы ожидаете на самом деле здесь?FILE
является непрозрачной структурой, содержащей то, что мы называем "индикатором положения". Это то, что позволяет "двигаться" в файле, fseek
а также ftell
,
Ваш char *
не имеет, ваш код прослушивается.
Правильно открыть файл с fopen
,