gpt4 book ai didi

c - 在 C 中用 fread 和 fwrite 提问

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:22 29 4
gpt4 key购买 nike

以下是我的代码,用于将一些硬编码的 int 值 (1,2,3,4,5) 写入文件,关闭该文件,以读取模式打开同一文件并读取写入的元素。从输出中可以看出,fwrite 正确发生,但 fread 读取不正确。

#include<stdio.h>
int main()
{

FILE *fptr;
FILE *optr;
const char *filepath = "E:\\testinput.txt";

int buf[5]={1,2,3,4,5};
int obuf[5];
int value;
int *ptr = &value;

int num_bytes_read;

int no_of_iterations;


int i;

int ret;//return value for fwrite

int count = 0;

no_of_iterations = 5;

//open the file

fptr = fopen(filepath, "wb");
if(fptr == NULL){
printf("error in opening input file");
}

/*optr = fopen(outFilepath, "wb");
if(optr == NULL){
printf("error in opening output file");
}*/



printf("int %d ", sizeof(int));

for(i=0;i<5;i++){
printf("writing %d",buf[i]);
ret = fwrite(buf,sizeof(int),1,fptr);
if(ret != 1)
{
printf("error in fwrite:%d\n", ret);
}
}
//written to input file
fclose(fptr);
fptr = fopen(filepath, "rb");
if(fptr == NULL){
printf("error in opening input file");
}

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

//reading from input file
num_bytes_read = fread(ptr,sizeof(int),1,fptr);
if(num_bytes_read == 1){


obuf[i] = *ptr;//storing into buf what is read from file
printf("read successful: %d\n", obuf[i]);
count++;
}
else{
count = 99;
break;
}


printf("\ncount%d", count);

}


fclose(fptr);

return 0;


}

写入的输入文件,如果手动打开(在任何文本编辑器中)看到 5 个非字母数字字符(重复相同的符号)这是 Eclipse 中的输出

int 4 writing 1writing 2writing 3writing 4writing 5read successful: 1

count1read successful: 1

count2read successful: 1

count3read successful: 1

count4read successful: 1

count5

最佳答案

问题出在这一行:

ret = fwrite(buf,sizeof(int),1,fptr);

fwrite 的所有 5 次调用都具有相同的缓冲区地址,因此每次写入数组的第一个元素时都是 1

由于要将所有数组元素一一写入,将buf+i作为起始地址传递给fwrite:

ret = fwrite(buf+i,sizeof(int),1,fptr);

现在fwrite得到的缓冲区起始地址就是数组中第i个元素的地址。

关于c - 在 C 中用 fread 和 fwrite 提问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5308620/

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