void write(string* str,char *content,int size) { char fName[20];strcpy_s(fName, str[1].c_str()); //在当前目录下查找目标文件 int i, j; for (i = 2; i < MSD + 2; i++) if (!strcmp(curDir->directItem[i].fileName, fName) && curDir->directItem[i].type == 0) break; if (i >= MSD + 2) { cout << "找不到该文件!" << endl; return; } int cur = i;//当前目录项的下标 int fSize = curDir->directItem[cur].size;//目标文件大小 int item = curDir->directItem[cur].firstDisk;//目标文件的起始磁盘块号 while (fat[item].item != -1)item = fat[item].item;//计算保存该文件的最后一块盘块号 char* first = fdisk + item * DISK_SIZE + fSize % DISK_SIZE;//计算该文件的末地址 //如果盘块剩余部分够写,则直接写入剩余部分 if (DISK_SIZE - fSize % DISK_SIZE > size) { strcpy_s(first, content); curDir->directItem[cur].size += size; } //如果盘块剩余部分不够写,则找到空闲磁盘块写入 else { //先将起始磁盘剩余部分写完 for (j = 0; j < DISK_SIZE - fSize % DISK_SIZE; j++) { first[j] = content[j]; } int res_size = size - (DISK_SIZE - fSize % DISK_SIZE);//剩余要写的内容大小 int needDisk = res_size / DISK_SIZE;//占据的磁盘块数量 int needRes = res_size % DISK_SIZE;//占据最后一块磁盘块的大小 if (needDisk > 0)needRes += 1; for (j = 0; j < needDisk; j++) { for (i = USER_ROOT_STARTBLOCK + 1; i < DISK_NUM; i++) if (fat[i].state == 0) break; if (i >= DISK_NUM) { cout << "磁盘已被分配完!" << endl; return; } first = fdisk + i * DISK_SIZE;//空闲磁盘起始盘物理地址 //当写到最后一块磁盘,则只写剩余部分内容 if (j == needDisk - 1) { for (int k = 0; k < size - (DISK_SIZE - fSize % DISK_SIZE - j * DISK_SIZE); k++) first[k] = content[k]; } else { for (int k = 0; k < DISK_SIZE; k++) first[k] = content[k]; } //修改文件分配表内容 fat[item].item = i; fat[i].state = 1; fat[i].item = -1; } curDir->directItem[cur].size += size; } }
时间: 2024-01-16 17:03:49 浏览: 83
在您的代码中,出现了一个strcpy_s函数调用错误。错误信息指出,没有与参数列表匹配的重载函数 "strcpy_s" 实例。这通常是因为传入的参数类型与函数声明不匹配导致的。在这种情况下,您需要检查调用strcpy_s函数的参数类型是否正确。
在您的代码中,您使用了一个char数组fName来存储文件名。然后,您使用strcpy_s函数将文件名复制到fName数组中。这里的问题可能是在调用strcpy_s函数时,传入的参数类型与函数声明不匹配。请确保传入的参数类型正确,并且检查函数声明是否正确。此外,也要确保已经包含了正确的头文件。
为了解决这个问题,您可以尝试将strcpy_s函数替换为strcpy函数,因为在此代码中,没有必要使用strcpy_s函数的安全特性。这样,您就可以避免与参数列表不匹配的问题。
相关问题
char fName[20];strcpy(fName, str[1].c_str())
这是一个将string类型的第一个元素转为char数组的操作。具体来说,str是一个字符串数组,str[1]是其中第二个字符串元素,c_str()函数可以将这个字符串元素转为const char*类型,然后使用strcpy函数将其复制到fName数组中。需要注意的是,如果str[1]的长度超过了fName数组的长度,可能会导致数组越界的问题。
这段代码中不同的图像尺寸有什么作用,for idx, image_size in enumerate(image_sizes): mkpts1_, mkpts2_ = superglue_inference(model, cache, fname1, fname2, image_size) if idx == 0: # first size -> ref, #1280 num_sg_matches = len(mkpts1_) if max(cache[fname1][image_size]['h'], cache[fname1][image_size]['w']) != image_size: mkpts1_[:,0] *= cache[fname1][image_size]['w']/cache[fname1][image_size]['w_r'] mkpts1_[:,1] *= cache[fname1][image_size]['h']/cache[fname1][image_size]['h_r'] if max(cache[fname2][image_size]['h'], cache[fname2][image_size]['w']) != image_size: mkpts2_[:,0] *= cache[fname2][image_size]['w']/cache[fname2][image_size]['w_r'] mkpts2_[:,1] *= cache[fname2][image_size]['h']/cache[fname2][image_size]['h_r'] mkpts1, mkpts2 = np.vstack([mkpts1, mkpts1_]), np.vstack([mkpts2, mkpts2_]) if num_sg_matches < n_matches: # return early, no extra matches needed return mkpts1, mkpts2, num_sg_matches
这段代码中不同的图像尺寸是用来调整图像大小的。在这个代码中,它遍历了一个包含多个图像尺寸的列表,每个尺寸对应着一个图像。在每次循环中,它会将当前图像大小传给super_glue_inference()函数来进行处理。由于不同的图像大小可能会影响到模型的输出和匹配结果,因此这个代码用不同的图像大小来测试模型的性能。通过这种方式,可以找出最适合模型的图像大小,并且可以在不同的应用场景中使用不同的图像大小来优化模型的性能。
阅读全文