gpt4 book ai didi

c - 为什么 fseek 在写入 (fwrite) 二进制文件时有效,但在读取 (fread) 时却无效? - C

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

基本上我的问题是当我使用以下程序时:

#include <stdlib.h>
#include <stdio.h>
#define SIZE 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, "rb+");

r = 11;


fseek(fp, 3 * sizeof(int), SEEK_SET);
fwrite(&r, sizeof(int), 1, fp);
fseek(fp, 10 * sizeof(int), SEEK_SET);
fwrite(&r, sizeof(int), 1, fp);


fclose(fp);
return 0;
}

它将二进制文件(1000 个整数)的第 3 位和第 10 位更新为 11。

但是当我执行以下操作时:

#include <stdlib.h>
#include <stdio.h>
#define SIZE 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, "rb+");

r = 11;

printf("\n\n Before making any changes:\n");

for (i = 0; i < SIZE; i++) {

fseek(fp, i * sizeof(int), SEEK_SET);
fread(&r, sizeof(int), 1, fp);
printf("%d ", r);


}

fseek(fp, 3 * sizeof(int), SEEK_SET);
fwrite(&r, sizeof(int), 1, fp);
fseek(fp, 10 * sizeof(int), SEEK_SET);
fwrite(&r, sizeof(int), 1, fp);


printf("\n\n After making changes:\n");

fseek(fp, 0, SEEK_SET);
for (i = 0; i < SIZE; i++) {

fread(&r, sizeof(int), 1, fp);
printf("%d ", r);


}

fclose(fp);
return 0;
}

它根本没有改变任何东西。以防万一你想知道,检查第一个程序是否工作我所做的是:

  1. 我将运行您在该文本下方的程序来检查存储在二进制文件中的整数。
  2. 我将运行您在此文本(我发布的第二个)之上的程序,将第 3 个和第 10 个整数更改为 11。
  3. 我会运行您下面的程序来检查这些整数是否已更改为 11。

它是这样工作的,但第一个程序似乎没有改变任何东西,它再次显示完全相同的数字。

#include <stdlib.h>
#include <stdio.h>
#define SIZE 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, "rb");

for (i=0;i<SIZE;i++) {

fread(&r, sizeof(int), 1, fp);
printf("%d ", r);

}

fclose(fp);
return 0;
}

最佳答案

第一个 for 循环将文件中的每个数字读入 r,然后再打印它们。在循环结束时,r 包含文件中的最后一个数字,并将其写入您查找的位置。

要么在循环中使用不同的变量,要么在循环之后放置 r = 11; 赋值。

关于c - 为什么 fseek 在写入 (fwrite) 二进制文件时有效,但在读取 (fread) 时却无效? - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42346674/

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