gpt4 book ai didi

c - FREAD C指针问题

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:04 25 4
gpt4 key购买 nike

您好,我对指针有一个非常令人沮丧的问题,有人可以让我知道我在这里做错了什么吗?谢谢

// This functions reads from the file 
void get__data_block_from_disk(char* ptr, int block_num){
int file_desc;
int x;
open_fs(file_path);
file_desc = fileno(fileptr);
x = lseek(file_desc, DATA_BLOCK_OFFSET + block_num*BLOCK_SIZE, SEEK_SET);
fread(&ptr, BLOCK_SIZE, 1, fileptr);
close_fs();
}

// This function writes to the file
void place__data_block_into_disk(char* ptr, int block_num){
int file_desc;
int x;
printf("char in place: %c\n", ptr);
open_fs(file_path);
file_desc = fileno(fileptr);
x = lseek(file_desc, DATA_BLOCK_OFFSET + block_num*BLOCK_SIZE, SEEK_SET);
fwrite(ptr, BLOCK_SIZE, 1, fileptr);
close_fs();
}

最佳答案

问题是你写的

fread(&ptr, BLOCK_SIZE, 1, fileptr);

你想要的地方:

fread(ptr, BLOCK_SIZE, 1, fileptr);

这是一个问题的原因是 ptr提供给 get__data_block_from_disk作为 char * .因此,我假设 ptr指向用于接收结果的内存。 (我希望您已指出足够内存,但您没有提供此案例的调用代码列表。)

鉴于ptr已经是指向您要将文件数据读入的内存的指针,它是您提供给 fread 的指针.通过提供 ptr 的地址, 通过写作 &ptr ,你建议fread()覆盖存储ptr的内存和任何相邻的变量。毫无疑问,这不是您想要的。

如果您在使用 C++ 编译器编译 C 代码时犯了错误,请停止。但如果你是,请注意 C++ 编译器会提示缺少 reinterpret_cast<>。类型转换ptr来自 char *void * .

关于c - FREAD C指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com