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
相关产品推荐
相关产品推荐

