c语言fread malloc,在C ++中使用fread(),fwrite()和malloc

我在C ++中使用fread和fwrite函数时遇到了惊人的困难。

该项目正在编写一个基本的FAT16文件系统,我们只能使用fread和fwrite。

当我最初编写文件时,我的代码如下所示:

directoryTable = (directoryEntry *)malloc(clusterSize);

for (int i = 0; i < bootRecord[0] / 128 ; ++i){

directoryEntry * newEntry = (directoryEntry *)malloc(sizeof(directoryEntry));

newEntry->name = (char *)malloc(112);

newEntry->name[0] = 'a'

write(1, &(newEntry->name[1]), 1);

newEntry->size = 0;

newEntry->type = 0;

newEntry->creation = 0x0000;

newEntry->index = 0;

fwrite(newEntry->name, 112, 1, fp);

fwrite(&newEntry->size, sizeof(int), 1, fp);

fwrite(&newEntry->type, sizeof(int), 1, fp);

fwrite(&newEntry->creation, sizeof(int), 1, fp);

fwrite(&newEntry->index, sizeof(int), 1, fp);

directoryTable[i] = *newEntry;

}

当我将directoryEntry-&gt; name的第一个字符分配给&#39; a&#39;时,我的意图实际上是为它分配值0x00,以便我稍后可以检查它是否为&#39; s空值。我只是使用权限进行调试。我的问题是当我读到它时,我什么也得不回来。

当我阅读时,我的代码如下:

fseek(fp, clusterSize * root, SEEK_SET);

for(int i = 0; i < clusterSize / 128; ++i){

directoryEntry * newEntry = (directoryEntry *) malloc(128);

newEntry->name = (char *) malloc(112);

fread(newEntry->name, 112, 1, fp);

write(1, newEntry->name[0],1);

fread(&newEntry->size, sizeof(int), 1, fp);

fread(&newEntry->type, sizeof(int), 1, fp);

fread(&newEntry->creation, sizeof(int), 1, fp);

fread(&newEntry->index, sizeof(int), 1, fp);

directoryTable[i] = *newEntry;

}

应该注意,也使用类似的方法读入clusterSize和root的值。我已经检查过了,在两种情况下它们的值都是准确的。由于我能够毫无问题地阅读这些内容,我不知道为什么我现在遇到这么大的问题。我觉得我对malloc的使用并不完全正确,我之前从未使用过它。

此外,如果需要,还有directoryTable的定义:

typedef struct{

char * name;

unsigned int index;

unsigned int size;

unsigned int type;

unsigned int creation;

} directoryEntry;

谢谢你们的时间,如果你需要我澄清任何我感到高兴的话。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值