我在使用 fwrite
和 fread -> fread (void*, size_t, size_t, FILE*);
时遇到了一些问题,当一组第二个 size_t
因为任何不同于零的数字都不起作用。
这是代码;这种方式行不通,如果有人可以提供帮助,我将不胜感激。
P.S.:如果我将 sc 替换为 read
和 write
函数,它会起作用,但不是预期的那样。
#include<stdio.h>
#include<stdlib.h>
#define TAM 10
#define sc 5
typedef struct str_score{
float scr;
char nome[TAM];
}score;
int main(){
FILE *arq;
int x;
score a[sc], i={0.00,"-empty-"};
if ((fopen("highscore.bin", "wb+"))==NULL){
perror("Erro na abertura do arquivo\n");
return 1;
}
fwrite(&i,sizeof(score), sc, arq);
fread(a ,sizeof(score), sc, arq);
for (x=0;x<sc;x++){
printf("%s %.2f", a[x].nome,a[x].scr);
}
return 0;
}
最佳答案
因为
i
不是一个数组,下面这行是不正确的fwrite(&i,sizeof(score), sc, arq);
应该是
fwrite(&i,sizeof(score), 1, arq);
您可以编写
sc
个元素,只有当您有一个大小为sc
或更大的初始化数组时。您不接受
fopen
的返回值。将您的fopen
行更改为if ((arq = fopen("highscore.bin", "wb+"))==NULL){
在
fwrite
和fread
之间,放一个fseek(arq, 0, SEEK_SET);
这会将文件指针重置为您开始写入的文件开头。
关于c - fread 和 fwrite 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17388465/