gpt4 book ai didi

c - 在随机访问文件中覆盖

转载 作者:可可西里 更新时间:2023-11-01 11:47:47 25 4
gpt4 key购买 nike

我有一个以“r+b”模式打开的随机访问文件,其中的记录长度相等。我可以在读取记录并覆盖后更改记录的内容吗?

我尝试了以下代码,但在运行时我得到:段错误(核心已转储)

#include<stdio.h>

int main()
{
struct tala {
int rec_no;
long file_no;
};
FILE *file_locking;
struct tala t,f;
file_locking = fopen("/path/to/my/file.bin", "rb+");
t.rec_no = 1;
t.file_no = 3;
if (fwrite(&t, sizeof(struct tala),1,file_locking)==0)
printf("Error opening file");
t.rec_no=0;
rewind(file_locking);
if (fwrite(&t, sizeof(struct tala),1,file_locking)==0)
printf("Error opening file");
rewind(file_locking);
if (fread(&f, sizeof(struct tala),1,file_locking)==0)
printf("Error opening file");
printf("\n %d",f.rec_no);
printf("\n %ld", f.file_no);
fclose(file_locking);
}

最佳答案

是的,你可以。请记住在读取和写入之间始终fseek

引用 fopen 手册页:

Reads and writes may be intermixed on read/write streams in any order. Note that ANSI C requires that a file positioning function intervene between output and input, unless an input operation encounters end-of-file.

额外提示:总是检查fopen和相关函数的返回值,并处理错误(使用perrorstrerror 打印出失败的内容)。

关于c - 在随机访问文件中覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006963/

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