fread和fwrite的问题

时间:2013-06-30 08:13:19

标签: c stream fwrite fread

我在使用fwritefread -> fread (void*, size_t, size_t, FILE*);的程序时遇到一些问题,当设置的第二个size_t为任何不同于0的数字时,它不起作用。 这是代码;它没有这种方式,如果有人能帮助我会很感激。

P.S。:如果我用readwrite函数代替那个sc,它会起作用,但不是预期的。

#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;

}

1 个答案:

答案 0 :(得分:2)

  1. 由于i不是数组,因此以下行不正确

    fwrite(&i,sizeof(score), sc, arq);
    

    这应该是

    fwrite(&i,sizeof(score), 1, arq);
    

    只有当您拥有大小为sc或更大的初始化数组时,才可以编写sc个元素。

  2. 您不接受fopen的返回值。将您的fopen行更改为

    if ((arq = fopen("highscore.bin", "wb+"))==NULL){
    
  3. fwritefread之间添加

    fseek(arq, 0, SEEK_SET);
    
  4. 这会将文件指针重置为开始编写文件的开头。