c - 如何在阅读时移入二进制文件?

标签 c struct fread

我将能够逐字节读取我所有的结构字节(字节 block 很大“sizeof(Today)”所以它有 8 个字节大)。我尝试了越来越多,但我做不到!请帮帮我!

bin文件:“temp.bin”

我的结构:

typedef struct
{
    int year;
    int month; 
} Today;

这是每个周期应该读取 8 个字节的代码的一部分:

 Today *d;
 d = malloc(sizeof(Today));

 fp = fopen("temp.bin", "rb"); 

 while(!feof(fp))
 { 
     fread(d, sizeof(Today), 1, fp);

     printf("Year = %i\n", d->year);
     printf("Month = %i\n", d->month);     
 } 

 fclose(fp);

更可能是 while 条件和 fread() 函数是错误的,但我尝试了所有可能的组合,但输出永远不是正确的! 谢谢大家

最佳答案

您可能希望首先为所有 block 分配空间,例如

fp = fopen( "temp.bin", "rb" );
if ( fp != NULL )
{
   fseek( fp, 0L, SEEK_END );
   size_t size = ftell(fp);
   rewind(fp);

   Today *d;
   d = malloc(size);
   fread( d, sizeof(Today), size/sizeof(Today), fp );
   fclose(fp);
}

然后你得到了数组中的结构

例如printf( "月: %d", d[5].month);

然后对数组中的每个元素执行您需要执行的操作,然后再将其写回。取决于你的文件有多大

关于c - 如何在阅读时移入二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33256373/

相关文章:

c - 可能的错误 - 将一个流与一个已经有关联的 FD 相关联?

c - 为什么 Atmega8 上的 MPU-6050 通过 I2C 输出显示恒定值?

c - 我的生命游戏计划的最后一点。看似随机的结果

c - 带循环的结构和内存分配

c - C 中的 fread 和 fwrite 链表

php - Fwrite() 和 Fread() 与 Mysql 数据库

C错误: lvalue required as left operand of assignment

c - 结构类型数组,C错误

reflection - 如何发出没有构造函数的新结构

c - fwrite 破坏了我的文本文件