c - fseek/fread 的问题

标签 c fread fseek

    fseek(fp,pinakas[256]*y,SEEK_SET);
    fread(pinakas,sizeof (pinakas[256]),1,fp);
    for(p=0 ; p<256 ; p++)
            printf(" %d",pinakas[p]);

这里有什么问题?因为每次我打印相同的数字... y 是一个会改变值的 int 。在 fp 中我打开一个二进制文件...我接受这个:

-120 36 -83 -5 0 -64 121 -73 0 -64 121 -73 0 -64 121 -73 0 -64 121 -73 0 -64 121 -73 0 -64 121 -73 0 -64 121 -73 0 64 122 -73 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 16 43 9 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 18 43 9 0 0 0 0 0 0 0 0 0 0 0 0 20 18 43 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -128 122 -107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

我获取一个逻辑地址并将其转换为物理地址。然后我必须从二进制文件中获取一个 256 字节的页面并将其存储到物理内存中。这里的“y”是页号。所以使用 fseek 我尝试找到二进制文件中的特定页面并使用 fread 读取它并将其存储到 pinakas[256]。

最佳答案

目前还不清楚您要做什么,但无论如何这是我的猜测:您正在从文件中读取数据 block ,每个数据 block 的长度为 256 字节:

char pinakas[256]; //this is the memory buffer for one page

int y = ...; //this is the page number
int p;

fseek(fp, 256*y, SEEK_SET);
fread(pinakas, 256, 1, fp);
for (p = 0; p < 256; p++)
    printf(" %d", pinakas[p]);

代码中的一个错误是使用 sizeof:sizeof(pinakas)256(数组的大小),但是sizeof(pinakas[256]),或任何其他数字只是1(数组中任何元素的大小)。

关于c - fseek/fread 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18855817/

相关文章:

c - 从文本文件中读取字符串以构建二叉搜索树?

使用 C 将 COMP 和 COMP-3 Packed Decimal 转换为可读值

c - 使用 fwrite 和 fread 保存和检索示例 malloc 数据库

c - 不带表达式返回

c++ - fread() 在在线编辑器和本地计算机 (C++) 上的不同行为

c - 在c程序中读取mp3文件的TAG2

C、将外部文本插入文本文件,

c - 为什么在更新模式下读取和写入之间总是需要 fseek 或 fflush?

io - 通过不简单地读取行来拆分大文本文件

使用 MagickWand C API 自定义浮雕