Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 文件将无法逐字节完全读取_C_File Io - Fatal编程技术网

C 文件将无法逐字节完全读取

C 文件将无法逐字节完全读取,c,file-io,C,File Io,使用我正在用Dev-C++编写的C程序,我希望逐字节读取二进制文件。出于某种原因,读取在261字节处停止。这是一个复制bavior的简化代码 int main(int argc, char *argv[]) { FILE *in_fp; char in_filename[25] = "data.raw"; in_fp = fopen(in_filename,"r"); if( in_fp == NULL ) { perror("Error while open

使用我正在用Dev-C++编写的C程序,我希望逐字节读取二进制文件。出于某种原因,读取在261字节处停止。这是一个复制bavior的简化代码

int main(int argc, char *argv[])
{
   FILE *in_fp;
   char in_filename[25] = "data.raw";
   in_fp = fopen(in_filename,"r");
   if( in_fp == NULL ) {
      perror("Error while opening the input file.\n");
      system("PAUSE");
      exit(EXIT_FAILURE);
   }

   int readcnt = 0;
   while (1) {
      unsigned char buffer;
      if (fread(&buffer, sizeof(unsigned char), 1, in_fp) == 0) {
         printf("read eof after %d\n", readcnt);
         break;
      } else {
         printf("read = %d\n", buffer);
      }
      readcnt++;
   }


   fclose(in_fp);

   return 0;
}
文件data.raw的大小为104 KiB

上述程序的输出以以下内容结束:

...
read = 255
read = 4
read = 204
read eof after 260
使用十六进制编辑器,我可以找到字节FF 04 CC,后面应该有字节,因为文件不在末尾:FF 04 CC1A 1F C5 8A

我还尝试了
fgetc()
feof()
,行为也是一样的


为什么读取会在偏移量260处停止?

您可能需要在以下位置打开文件:


您可能需要在以下位置打开文件:


如果您在windows上,文件处于文本模式,
1A
==ctrl+Z,即EOF。如果您在windows上,文件处于文本模式,
1A
==ctrl+Z,即EOF。非常感谢您的快速回答!这就解决了问题。我一直在错误的位置搜索。@rinntech提到
dev-c++
立即触发了“哦,对了,windows”:-)非常感谢您的快速回答!这就解决了问题。我一直在错误的位置搜索。@rinntech提到
dev-c++
立即触发了“哦,对了,windows”:-)
fopen(in_filename, "rb");