请解释下端代码:void enter() { FILE *fp; int i; flihao = (char *)malloc(MEM_D_SIZE*sizeof(char)); if((fp=fopen("lihao.dat","rb"))==NULL) { printf("Cannot open file\n"); return; } if(!fread(flihao,MEM_D_SIZE,1,fp)) { printf("Cannot read file\n"); exit(0); } fat = (struct fatitem *)(flihao+lihaoSIZE); root = (struct direct *)(flihao+lihaoSIZE+FATSIZE); fclose(fp); //初始化用户打开表 for(i=0;i<MOFN;i++) { strcpy(u_opentable.openitem[i].name,""); u_opentable.openitem[i].firstlihao = -1; u_opentable.openitem[i].size = 0; } u_opentable.cur_size = 0; cur_dir = root; bufferdir = (char *)malloc(DIR_MAXSIZE*sizeof(char)); strcpy(bufferdir,"lihao:"); }
时间: 2024-04-25 18:25:46 浏览: 12
这段代码定义了一个名为 `enter` 的函数,其作用是读取名为 `lihao.dat` 的文件,并初始化一些变量。下面是函数具体的实现:
1. 申请一段内存空间,并将其地址赋给 `flihao` 指针,该指针指向的内存大小为 `MEM_D_SIZE*sizeof(char)`。
2. 尝试以二进制只读方式打开名为 `lihao.dat` 的文件,如果打开失败则输出 "Cannot open file" 并返回。
3. 将文件中的数据读取到之前分配的内存空间中,如果读取失败则输出 "Cannot read file" 并退出程序。
4. 根据文件格式计算出 `fat` 和 `root` 的地址,并将其分别赋给 `fat` 和 `root` 指针。
5. 关闭文件。
6. 初始化用户打开表,其中 `MOFN` 是一个常量,表示用户打开表的最大大小。循环遍历用户打开表,将每个表项的文件名、起始位置和大小初始化为默认值。
7. 将用户打开表的当前大小设为0。
8. 将当前目录设为根目录。
9. 申请一段内存空间,并将其地址赋给 `bufferdir` 指针,该指针指向的内存大小为 `DIR_MAXSIZE*sizeof(char)`。
10. 将 `bufferdir` 的值设为 "lihao:",表示当前路径为 "lihao:"。
相关问题
用c++写:flieNum = (char *)malloc(MEM_D_SIZE*sizeof(char));
将flieNum = (char *)malloc(MEM_D_SIZE*sizeof(char));转换为C++代码可以是:
```
char *flieNum = new char[MEM_D_SIZE];
```
这行代码会分配一个大小为MEM_D_SIZE的char类型数组,并将其首地址赋值给flieNum指针变量。需要注意的是,使用完该数组后,需要调用delete[] flieNum;来释放该内存空间。
用c++写:(char *)malloc(MEM_D_SIZE*sizeof(char));
在C++中,我们通常使用new和delete关键字来进行动态内存的分配和释放。因此,将(char *)malloc(MEM_D_SIZE*sizeof(char));转换为C++代码可以是:
```
char *ptr = new char[MEM_D_SIZE];
```
这行代码会分配一个大小为MEM_D_SIZE的char类型数组,并将其首地址赋值给指针变量ptr。需要注意的是,使用完该数组后,需要调用delete[] ptr;来释放该内存空间。