我尝试使用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;
}
答案 0 :(得分:1)
fread
应该为第4个参数设置FILE *
参数。你给了一个“char *”。
你真的在这里期待什么?
FILE
是一个包含我们称之为“位置指示符”的选择结构。这就是允许在文件fseek
和ftell
中“移动”的内容。
您的char *
没有,您的代码会被窃听。
使用fopen
正确打开文件。