fwrite一直失败,不确定为什么

| 据我所知,在下面的代码中,文件已正确写入。当我查看文件floats.dat时,我看到此二进制流ѭ0stream 但是我的程序总是最终触发以下if语句:
if(fread(inputFloats, sizeof(float), LENGTH, binaryFile) < LENGTH)
{
   fprintf(stderr, \"Problem reading some or all data from %s\\n\\n\", binaryFileName);
   return EXIT_FAILURE;
}
有人在这里看到我做错了什么吗?完整代码如下。
#include <stdlib.h>
#include <stdio.h>
#define LENGTH 10

int main(void)
{
   FILE *binaryFile, *textFile;
   char *binaryFileName = \"floats.dat\", *textFileName = \"floats.txt\";
   float floats[LENGTH] = {3.2, 3.55, 6.9, 12.4, 14.332, 56.5, 4003.4, 456.4, 65.7, 83.4};
   float inputFloats[LENGTH];
   int i;

   if((binaryFile = fopen(binaryFileName, \"r+\")) == NULL)
   {
      fprintf(stderr, \"Problem opening %s\", binaryFileName);
   }

   if(fwrite(floats, sizeof(float), LENGTH, binaryFile) < LENGTH)
   {
      fprintf(stderr, \"Problem writing some or all data to %s\\n\", binaryFileName);
      return EXIT_FAILURE;
   }

   printf(\"DATA WRITTEN SUCCESSFULLY\\n\");

   if(fread(inputFloats, sizeof(float), LENGTH, binaryFile) < LENGTH)
   {
      fprintf(stderr, \"Problem reading some or all data from %s\\n\\n\", binaryFileName);
      return EXIT_FAILURE;
   }

   for(i = 0; i < LENGTH; i++)
   {
      printf(\"float[%d] = %f\\n\", i, floats[i]);
   }

   return EXIT_SUCCESS;
}
    
已邀请:
您不使用文本数据,因此在打开文件时应指定二进制模式。使用
r+b
代替
r+
写入后,需要“ 5”来“倒回”文件。
rewind
也可用于这种情况-
fseek
可让您将读取/写入指针放置在所需的任何位置。     
FILE
结构记录了文件当前指向的位置。由于您刚刚写入
binaryFile
,因此文件指针位于所写入内容的末尾。 因此,在阅读之前,您需要使用
fseek(binaryFile, 0, SEEK_SET);
倒带文件。     
您在读文件之前忘了倒带文件:
rewind(binaryFile);
    
当您完成对文件的写入时,FILE指针位于文件的末尾,因此,如果您尝试读取它,则当然是行不通的。在读取之前,尝试使用
fseek
将指针移至文件的开头。 请避免这种情况:
if((binaryFile = fopen(binaryFileName, \"r+\")) == NULL) {
并喜欢这样:
binaryFile = fopen(binaryFileName, \"rb+\");
if(!binaryFile) {
    

要回复问题请先登录注册