Я работаю над своим школьным проектом, в котором мне нужно обрабатывать файлы на c / c ++. Я беспокоюсь об использовании while((c=fgetc())!=EOF)
, потому что:
Что, если двоичный код файла содержит 11111111
, который имеет то же значение, что и EOF, и программа неожиданно завершает работу?
здесь Пример кода, в котором я сначала создаю двоичный код, содержащий -1
, и программа завершает работу, прежде чем действительно достигнет конца файла.
int main()
{
FILE *p;
fopen_s(&p, "my.binn", "wb");
char c;
char result;
for (int t = 0; t < 3; t++)
{ //putting some bytes in file
result = 0;
for (int r = 0; r < 8; r += 2)
{
result |= (1 << (7 - r));
}
putc(result, p);
}
result = 0;
for (int r = 0; r < 8; r++)
{ //putting a byte of 11111111
result |= (1 << (7 - r));
}
putc(result, p);
for (int t = 0; t < 3; t++)
{ //again putting some bytes in file
result = 0;
for (int r = 0; r < 8; r += 2)
{
result |= (1 << (7 - r));
}
putc(result, p);
}
fclose(p);
fopen_s(&p, "my.binn", "rb");
while ((c = fgetc(p)) != EOF)
{ //here this loop was expected to continue until end of file(7 bytes) but it prints only three stars
cout << "*";
}
fclose(p);
return 0;
}
Может кто-нибудь помочь мне с этим, пожалуйста?