使用fseek函数读取文件时出现问题

时间:2017-06-12 14:10:08

标签: c

我正在生成500个随机点(每个点的维度为4)并将它们写入二进制文件,如下所示:

FILE *fp = fopen("file.bin", "wb+");
float *buf = (float *) calloc(500 * 4, sizeof(float));
srand(1);
for (i = 0; i < (500 * 4); ++i) {
    buf[i] = (float) rand() / (float) RAND_MAX; // Later I shall treat every 4 values as one point.
}
fwrite(buf, sizeof(float), 500 * 4 * sizeof(float), fp);
fclose(fp);

稍后在我的代码中,我想只读取前100个点(即100 * 4,因为每个点是dim = 4)。我使用以下代码来执行此操作,但我遇到了问题,并且它没有真正打印任何内容:

FILE *fp = fopen("file.bin", "rb+");

fseek(fp, 0, SEEK_SET);
int c, cnt=0;
while(1)
{
    c = fgetc(fp);
    if(feof(fp) || (cnt == 100)) { break; }
    printf("%c", c);
    cnt++;
}
printf("\n");
fclose(fp);

1 个答案:

答案 0 :(得分:4)

如果您只想回读100个元素(如4个浮点数),那么您放入fread的数字就像这样...

fread(buf, sizeof(float), 100 * 4, fp);

根据上面的各种评论,您对fwrite的致电应该看起来类似,因为您不需要额外的sizeof(float)

fwrite(buf, sizeof(float), 500 * 4, fp);