【发布时间】: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 进行测试