开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Code::Blocks, GNU GCC, Windows 7
问题(Question):
这是一个以含有以fread回传值作while循环判断式的档案处里程式
但每次执行总会陷入无穷循环,同时档案不断增大
上网查了一下很有可能是fwrite会使档案增大因而无法读到eof
但我已经将fread写在while的条件式里头,
每次写入之前应该就会进行判断是否读到结尾
不知是否跟我使用的变量类型有关(unsigned long)?
程式码(Code):(请善用置底文网页, 记得排版)
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *img = fopen("image.bmp", "r+b");
if (img == NULL) {
perror("");
return 1;
}
fseek(img, 10, SEEK_SET);
long off = 0;
fread(&off, 4, 1, img);
fseek(img, off, SEEK_SET);
unsigned long buf = 0;
while(fread(&buf, 4, 1, img)){
printf("%lXh\n", ftell(img));
//除错用,把档案指标位置输出在萤幕上
buf = ((buf << 4) & 0xF0F0F0F0) | ((buf >> 4) & 0xF0F0F0F);
//这段是主要的处理
fseek(img, -4, SEEK_CUR); //倒退回读入资料的位置
fwrite(&buf, 4, 1, img); //覆蓋原本资料
}
fclose(img);
return 0;
}
补充说明(Supplement):
个人非程式设计相关科系出身,在课堂上只学到了基础的C/C++
加上有段时间没有碰程式语言了,可以说是没啥底子,现在都靠网络资料自学
在不知如何除错后,决定快速复习一下十诫与板规然后在这里第一次发问
如果我犯了什么常见错误也请直接指出