我无法弄清楚为什么我的while循环不起作用。如果没有它,代码运行得很好...代码的目的是在二进制文件中查找秘密消息。所以我让代码找到了这些字母,但是当我试图让它循环到文件结尾时,它就无法工作。我对此很陌生。我做错了什么吗?
main(){
FILE* message;
int i, start;
long int size;
char keep[1];
message = fopen("c:\\myFiles\\Message.dat", "rb");
if(message == NULL){
printf("There was a problem reading the file. \n");
exit(-1);
}
//the first 4 bytes contain an int that tells how many subsequent bytes you can throw away
fread(&start, sizeof(int), 1, message);
printf("%i \n", start); //#of first 4 bytes was 280
fseek(message, start, SEEK_CUR); //skip 280 bytes
keep[0] = fgetc(message); //get next character, keep it
printf("%c", keep[0]); //print character
while( (keep[0] = getc(message)) != EOF) {
fread(&start, sizeof(int), 1, message);
fseek(message, start, SEEK_CUR);
keep[0] = fgetc(message);
printf("%c", keep[0]);
}
fclose(message);
system("pause");
}
编辑:
在调试器中查看我的代码后,发现while循环中有"getc"使一切混乱了。我通过创建一个名为letter的新字符并将代码替换为以下内容来修复它:
fread(&start, sizeof(int), 1, message);
fseek(message, start, SEEK_CUR);
while( (letter = getc(message)) != EOF) {
printf("%c", letter);
fread(&start, sizeof(int), 1, message);
fseek(message, start, SEEK_CUR);
}
现在它运行得非常好。欢迎提出更多建议。谢谢大家。
feof()
只有在尝试读取超过最后一个字节之后才会返回 true。 - dreamlaxfeof
基本上永远不正确。 - Kerrek SBchar keep
并且在所有地方都去掉[0]
。 - GraphicsMuncher