使用fseek,fread和指针读取文件

时间:2018-03-19 09:08:15

标签: c fread fseek

我尝试使用c操纵图像,并尝试完全理解fseek()和fread ()机制。

为什么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 个答案:

答案 0 :(得分:1)

fread应该为第4个参数设置FILE *参数。你给了一个“char *”。

你真的在这里期待什么? FILE是一个包含我们称之为“位置指示符”的选择结构。这就是允许在文件fseekftell中“移动”的内容。

您的char *没有,您的代码会被窃听。

使用fopen正确打开文件。