c-读取文件时出现随机内存



我在C中制作了一个函数,可以将文件读取到内存中。但我的代码有问题,字符串末尾似乎出现了随机字符。即使我在末尾添加了"\0"。我一点也不明白,因为整个文件都出现了,而且我还没有为更多的字符分配足够的空间,所以如果有更多的字符,应该会有某种错误吗?不管怎样,有人知道是什么原因造成的吗?

char* LoadSourceFile(char* filename)
{
    int fileSize;
    char* buffer;
    struct stat handle;
    FILE* bestand;
    stat(filename, &handle);
    if (fopen_s(&bestand, filename, "r") != 0) {
        return NULL;
    }
    fileSize = handle.st_size;
    handle.st_size++;
    buffer = (char*)malloc(handle.st_size);
    if (buffer == NULL) {
        return buffer;
    }
    fread_s(buffer, handle.st_size, fileSize, 1, bestand);
    buffer[fileSize] = '';
    fclose(bestand);
    return buffer;
}

查看fread_s的返回值,它是读取到缓冲区的字节数。这可能比预期的要少。

bytes_read = fread_s(buffer, handle.st_size, fileSize, 1, bestand);
buffer[bytes_read] = '';

编辑:你必须交换计数/大小参数才能使我说的正确:

bytes_read = fread_s(buffer, handle.st_size, 1, fileSize, bestand);
buffer[bytes_read] = '';

fread_s(buffer, handle.st_size, fileSize, 1, bestand);

应该是

fread_s(buffer, handle.st_size, 1, fileSize, bestand);

根据文档,函数fread_s接受以下内容:

size_t fread_s(void *buffer,size_t bufferSize, size_t elementSize, size_t count, FILE *stream );

缓冲区:数据的存储位置。

bufferSize:目标缓冲区的大小(以字节为单位)。

elementSize:要读取的项的大小(以字节为单位)

count:要读取的最大项目数。

stream:指向FILE结构的指针。

您将elementSize设置为filesize,这意味着每个元素都是filesize字节,而它应该是1字节。

请去掉

handle.st_size++;

并插入

buffer = (char*)malloc(sizeof(char) * ( handle.st_size + 1 ) );

fread_s(buffer, handle.st_size + 1, 1, handle.st_size, bestand);

希望有帮助:)

相关内容

  • 没有找到相关文章

最新更新