You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现小型FS文件系统报unknown type name 'Table_bp'错误求助

错误原因

C语言的类型、结构体定义遵循顺序解析规则,你在定义Table_function结构体时,内部成员使用了Table_bp类型,但此时Table_bp的typedef定义还在Table_function的后面,编译器解析到Table_bp iNode;这行时还没有识别到Table_bp这个自定义类型,因此抛出未知类型名的报错。

修复方案

直接调整两个结构体的定义顺序即可,把Table_bp的定义放到Table_function前面:

// 先定义Table_bp
typedef struct Table_bp
{
  int size_file;
  int dataBlockPointer;
  char DTmodified[TIME_LENGTH];
} Table_bp;

// 再定义用到Table_bp的Table_function
typedef struct Table_function
{
  char fileName[FILE_SIZE];
  Table_bp iNode;
} Table_function;

修改完成后该报错就会消失。

其他潜在代码问题提醒

你的代码里还有几处逻辑错误需要提前修正,避免后续运行异常:

  • createFS函数中,数据块指针数组申请的大小写死了SIZE_OF_BLOCK,应该替换为传入的number_of_blocks,否则如果用户输入的块数超过256会出现内存越界:
    原代码:d_holder=(char**) malloc(SIZE_OF_BLOCK*sizeof(char*));
    修改为:d_holder=(char**) malloc(number_of_blocks * sizeof(char*));
  • 每个数据块的内存申请参数错误,你现在申请的大小等于块数,实际应该是固定的块大小SIZE_OF_BLOCK:
    原代码:d_holder[i]=(char*)malloc(number_of_blocks*sizeof(char));
    修改为:d_holder[i]=(char*)malloc(SIZE_OF_BLOCK * sizeof(char));
  • 所有映射表(FNTMap、ABPTMap、dataBlockMap)的内存申请参数错误,你申请的是指针类型的大小,实际应该是int类型的大小:
    比如原代码FS.FNTMap= malloc(FNT*sizeof(int*)); 修改为FS.FNTMap= malloc(FNT*sizeof(int));,其他映射表同理。

内容的提问来源于stack exchange,提问作者Sai Manjunath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:36:02