我是一个乞丐,但我基本上创建了一个程序,打开一个包含'部分的二进制文件'结构,读取结构 在数组中,将每个结构的on_hand成员设置为0,然后将结构写回文件。这是我的代码:
invclear.c
/* Modifies a file of part records by setting the quantity
on hand to a zero for all records */
#include <stdio.h>
#include <stdlib.h>
#define NAME_LEN 25
#define MAX_PARTS 100
struct part { //size= 36 bytes (2 holes in between number and name[] array
int number;
char name[NAME_LEN+1];
int on_hand;
}inventory[MAX_PARTS];
int num_parts;
int main()
{
FILE *fp;
int i;
if((fp=fopen("clear_sample.c", "rb+")) == NULL)
{
fprintf(stderr, "Can't open inventory file.\n");
exit(EXIT_FAILURE);
}
num_parts = fread(inventory, sizeof(struct part), MAX_PARTS, fp); //reads the contents
for(i=0; i<num_parts; i++)
inventory[i].on_hand=0; //clears them
rewind(fp); //sets file position at beggining
fwrite(inventory,sizeof(struct part), num_parts, fp);
fclose(fp);
return 0;
}
clear_sample.c
#include <stdio.h>
#include <stdlib.h>
#define NAME_LEN 25
#define MAX_PARTS 100
struct part {
int number;
char name[NAME_LEN+1];
int on_hand;
}inventory[MAX_PARTS]={0};
int main()
{
int i;
int num_parts;
for(i=1;i<=15;i++)
inventory[i].on_hand=i;
for(i=1;i<=15;i++)
printf("%d\n",inventory[i].on_hand);
return 0;
}
它运行没有错误但很遗憾它没有将on_hand变量清除为0,实际上它几乎删除了整个文件。这是我修改过的 clear_sample.c 文件:
#include <stdio.h>
#include <st
我非常感谢任何关于我为什么做错的想法。
答案 0 :(得分:2)
您使用的任何工具都会误导您检查生成的文件。它不是
#include <stdio.h>
#include <st
实际上它是
#include <stdio.h>
#include <std^@^@^@^@h>
#define NAME_LEN 25
#define ^@^@^@^@PARTS 100
struct part {
int^@^@^@^@ber;
char name[NAME_LEN+1];
^@^@^@^@int on_hand;
}inventory[MAX_^@^@^@^@S]={0};
int main()
{
int i^@^@^@^@ int num_parts;
for(i=1;i<^@^@^@^@i++)
inventory[i].on_han^@^@^@^@
for(i=1;i<=15;i++)
^@^@^@^@ntf("%d\n",inventory[i].on_hand)^@^@^@^@ return 0;
}
所有^@
都是二进制零字节,对应于您放入on_hand
的零。
如评论中所述,要测试您的程序,请准备一个符合您期望格式的文件。