【问题标题】:Why isn't fread, fwrite or fseek working properly for me? - C为什么 fread、fwrite 或 fseek 不适合我? - C
【发布时间】:2017-07-07 15:27:52
【问题描述】:

我有以下问题,我一直在尝试解决,但仍然无法解决。

我有一个二进制文件,其中包含 0-9 的 1000 个随机整数,我使用的代码是:

int main() {

FILE *fp;
int r, i;

char fp_string[600] = "/Users/mac/Library/Mobile Documents/com~apple~CloudDocs/College/Program With Persistent Data/Lab 3/num1000.bin";

fp = fopen(fp_string, "wb+");

srand(time(NULL));

for (i=0;i<1000;i++) {
    r = rand()%10; //returns a pseudo-random integer between 0 and 20
    fwrite(&r, sizeof(int), 1, fp);

}

fclose(fp);

return 0;

}

好的,这样工作正常,现在问题来了。如果我尝试使用 fseek 更改第三个值,然后读取它,它不会起作用。

int main() {
FILE *fp;
int r, i;

char fp_string[600] = "/Users/mac/Library/Mobile Documents/com~apple~CloudDocs/College/Program With Persistent Data/Lab 3/num1000.bin";

fp = fopen(fp_string, "wb+");

r = 9;

if (fseek(fp, 3, SEEK_SET) == 0) {
    fwrite(&r, sizeof(int), 1, fp);
    fseek(fp, 3, SEEK_SET);
    fread(&i, sizeof(int), 1, fp);
    printf("\n\nr = %d, i = %d \n\n", r, i);
}

fclose(fp);
return 0;

}

'i' 和 'r' 是相同的数字,但是,我尝试显示所有数字,但它们都已更改(如下所示)。我到处找了,我仍然找不到任何东西。

在使用 fseek 和 fwrite 之前显示数字:

7 0 8 9 6 2 0 3 4 2 5 7 7 1 1 6 7 9 8 0 8 9 8 0 2 3 1 1 3 8 1 9 8 8 2 7 6 1 5 8 0 8 3 4 9 1 5 2 2 8 2 0 9 8 5 1 8 4 2 4 8 1 2 5 2 0 6 6 1 1 0 8 6 1 3 1 4 0 9 9 7 0 1 8 1 7 9 6 3 0 6 5 7 6 5 3 4 1 1 3 5 6 0 3 2 7 9 7 3 1 5 8 2 3 4 5 0 5 0 2 4 6 8 8 1 2 4 7 4 0 7 0 3 6 2 4 9 8 3 0 3 6 5 0 0 5 3 2 3 9 9 8 3 7 4 5 5 6 8 2 9 6 0 5 7 3 9 4 6 3 2 5 4 6 1 3 1 5 9 6 3 4 1 6 4 5 5 4 3 1 1 7 1 2 1 1 3 0 4 0 4 7 7 0 1 9 8 8 9 6 8 8 2 2 8 7 0 5 5 1 4 0 7 2 0 1 1 7 8 9 6 7 3 3 0 2 5 3 4 1 2 6 5 9 2 6 1 9 5 0 4 1 0 3 4 7 6 6 6 2 7 3 3 2 3 9 8 1 0 5 3 6 6 6 5 4 6 0 0 4 3 9 7 9 5 3 2 9 0 7 8 8 3 1 6 4 7 6 1 8 0 1 6 1 8 8 3 3 5 9 9 0 8 6 2 1 7 7 8 6 8 8 0 3 0 3 1 4 6 0 2 8 7 0 7 1 1 0 6 9 1 0 3 8 2 0 4 3 1 6 4 8 0 2 2 5 2 2 4 6 4 7 1 7 1 2 9 5 8 9 0 2 4 9 2 3 0 8 9 1 8 1 7 9 2 3 7 8 7 7 1 3 2 8 8 3 5 5 1 4 2 0 7 5 3 0 8 8 8 6 7 2 6 8 6 3 0 5 8 0 2 4 8 7 9 5 8 6 2 2 4 7 3 3 4 5 5 2 9 7 5 8 3 9 9 0 1 9 5 6 2 6 7 1 9 8 4 9 5 6 1 6 3 0 7 1 6 6 2 3 8 9 6 8 2 1 5 9 5 5 3 4 9 8 7 4 6 2 0 2 1 6 6 5 0 2 4 8 8 6 0 9 4 9 1 1 5 7 6 2 2 6 2 1 7 0 2 9 1 6 8 7 1 8 9 6 6 2 8 1 8 2 0 9 5 9 0 0 0 6 4 4 8 8 4 9 3 2 1 3 7 1 2 2 1 9 0 0 2 8 1 3 6 9 5 7 9 9 1 7 2 1 3 9 1 4 4 9 3 6 7 5 9 6 8 0 7 2 1 3 0 7 3 8 9 5 0 4 9 6 5 6 7 4 9 1 9 8 2 2 2 9 6 7 0 1 0 2 4 9 9 8 8 6 2 1 2 5 8 6 2 3 8 1 4 6 0 7 8 1 5 6 2 4 4 1 2 3 8 4 6 1 6 9 0 0 9 8 7 7 5 7 9 1 4 7 5 3 0 6 8 1 1 3 1 4 7 6 9 5 7 4 0 1 8 3 0 9 3 5 9 2 4 9 3 1 8 1 9 6 5 5 4 3 6 7 6 2 1 0 1 2 0 4 1 3 7 1 2 0 1 5 5 8 5 9 7 3 0 7 3 5 7 9 1 5 2 9 6 5 9 0 9 5 4 0 4 1 6 6 1 6 8 7 7 5 1 9 8 9 1 9 4 1 5 9 5 3 5 5 1 5 9 7 4 9 0 7 1 9 5 9 6 3 0 2 7 9 3 7 5 4 6 8 7 9 6 5 8 1 8 1 9 5 2 0 5 5 4 7 0 2 2 1 9 9 7 3 4 9 7 9 0 0 1 1 8 1 7 6 5 0 4 0 4 7 1 0 3 2 5 9 3 4 4 1 6 1 0 9 8 2 1 3 9 4 5 8 0 6 7 5 6 5 3 5 4 0 4 0 0 7 7 0 5 2 3 0 6 8 9 9 1 8 0 1 4 1 2 9 4 6 6 4 1 3 4 7 0 6 5 9 6 6 3 5 4 9 6 2 6 4 9 0 8 2 1 4 8 8 0 9 5 4 2 9 6 0 2 8 0 8 9 5 0 1 6 5 4 8 4 4 9 8 8 1 4 5 1 0 3 6 9 0 2 2 4 3 9 9 5 4 0 1 4 5 2 5 8 8 6 9 7 9 9 7 2 7 1 3 8 9 1 7 2 8 5 9 1 5 8 5 5 7 3 6 3 9 4 5

使用 fseek 和 fwrite 后显示数字:

150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150994944 150 994944

感谢您的帮助:)

【问题讨论】:

  • 第二个程序没有循环。你如何获得第二个输出?还是文件的内容?
  • 没有 'r' 标志的 fopen 怎么能阅读
  • "如果我尝试使用 fseek 来更改第三个值,..." fseek(fp, 3,SEEK_SET) 将寻找第三个 byte,而不是第三个值。
  • 要读取文件,我只需获取第一个程序并将 fwrite 更改为 fread,并具有读取权限。谢谢你的帮助。我只是想看看那里写的是什么

标签: c file binary fwrite fseek


【解决方案1】:

在第二个清单中有这一行:

fp = fopen(fp_string, "wb+");

您正在将文件截断为零长度。

你想要:

fp = fopen(fp_string, "rb+");

参考:fopen - open a stream

【讨论】:

  • 谢谢,我不知道 rb+ 是个东西。
  • 我在那里正确使用 fseek 吗?
  • 不,你需要做fseek(fp, 3 * sizeof(int), SEEK_SET)
  • 哦,好吧,感谢您的时间和帮助 :)
猜你喜欢
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
相关资源
最近更新 更多