【问题标题】:The struct that is stored to my file isn't being Overwritten ( C )存储到我的文件的结构没有被覆盖( C )
【发布时间】:2017-08-02 17:54:57
【问题描述】:
#include <stdio.h>
#include <string.h>

typedef struct batch
{
  int month;
  int day;
  int qty;
  float item_cost;
  int batch_num;
} BATCH;

struct stock
{
  char item_name[50];
  int t_qty;
  float t_item_cost;
  int item_code;
  BATCH batch[10];
  int last_batch_num;
  float price_for_one;
  float price;
};

int main()
{
   FILE *filepointer;
   filepointer = fopen("stocklist.txt", "r+");

   struct stock loop;

   while(fread(&loop, sizeof(struct stock), 1, filepointer))
   {
       printf("%s\n", loop.item_name);
       strcpy(loop.item_name, "Jerb");
       printf("%s\n", loop.item_name);

       fwrite(&loop, sizeof(struct stock), 1, filepointer);
    }
}

有一个文本文件,它的 item_name 是 Huggies,所以每次我运行程序时,它都应该将 Huggies 的名称更改为“Jerb”,但它似乎对文件没有任何影响,并且旧的 item_name 在文件中保持不变。

我原以为如果我使用“r+”模式,它会覆盖文件中的这些数据,但事实并非如此。

请帮忙!!

【问题讨论】:

  • 你检查文件大小了吗?你不倒带,记录怎么覆盖?
  • 你考虑过填充你的结构吗?它没有对齐,所以编译器会填充它。
  • 我认为the description of the extended open modes of fopen 中的“但是..”语句(例如您的r+ 所做的)可能值得第二次(或第一次)查看。
  • 您的代码存在严重问题。您正在同时编辑和阅读您的文件,这也是整个 276 字节?
  • 尝试将 sizeof(struct stock) 替换为 5 进行测试

标签: c file struct overwrite


【解决方案1】:

尝试在循环内执行 fflush() 并在退出前执行 fclose。调用 fwrite() 时,输出将写入缓冲区,直到生成 4kb 的数据,并仅在达到 4kb 或调用 fflush/fclose 时才刷新到文件。

【讨论】:

    猜你喜欢
    • 2017-05-16
    • 2015-07-31
    • 2021-10-22
    • 2021-02-21
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2019-06-24
    相关资源
    最近更新 更多