【发布时间】:2023-03-16 15:01:01
【问题描述】:
我正在将一个文件从 linux 复制到我们的文件系统,我们已经成功完成,但是当文件打印出来时,文件末尾有多余的字符。我们认为它与内存分配有关,但我们不知道如何修复它。谢谢您的帮助!
实际EOF:∴但是没有TM可能决定H,所以M_o不可能存在。。}�0E。
正确的EOF:∴但是没有TM可能决定H,所以M_o不可能存在。
void copyToFS(char *filePath, int currentDirectoryID)
{
printf("Enter file path: ");
scanf("%s",filePath);
int node = assignNode(filePath, 0, currentDirectoryID);
long int fileSize = getFileSize(filePath);
FILE *file = fopen(filePath, "r");
printf("\nSize of : %ld", fileSize);
char fileBuffer[fileSize];
if (file != NULL) {
fseek(file, 0, SEEK_SET);
fread(fileBuffer, fileSize, 1, file);
} else {
printf("Could not open file :(");
}
fclose(file);
printf("\n%s", fileBuffer);
assignBlocks(fileBuffer, node, fileSize/512);
}
【问题讨论】:
-
我不明白你的问题,这显然缺少一些minimal reproducible example,并且可能与SO无关。考虑阅读一些textbook on operating systems
-
您缺少
'\0'字符串终止符的空间。没有终止符fileBuffer不是字符串,使用"%s"打印它会调用 UB。仅考虑此printf()和终结者问题的简单修复:char fileBuffer[fileSize + 1] = {0}; -
我完全遵循了这一点,但 {0} 抛出“可变大小的对象可能未在 fileSize+1 上初始化:(
标签: c file io operating-system filesystems