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,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,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,SEEK_SET);
倒带文件。     ,您在读文件之前忘了倒带文件:
rewind(binaryFile);
    ,当您完成对文件的写入时,FILE指针位于文件的末尾,因此,如果您尝试读取它,则当然是行不通的。在读取之前,尝试使用
fseek
将指针移至文件的开头。 请避免这种情况:
if((binaryFile = fopen(binaryFileName,\"r+\")) == NULL) {
并喜欢这样:
binaryFile = fopen(binaryFileName,\"rb+\");
if(!binaryFile) {
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...