c - fread 和 fwrite 的问题

标签 c stream fwrite fread

我在使用 fwritefread -> fread (void*, size_t, size_t, FILE*); 时遇到了一些问题,当一组第二个 size_t 因为任何不同于零的数字都不起作用。 这是代码;这种方式行不通,如果有人可以提供帮助,我将不胜感激。

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

#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. 因为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);
    

这会将文件指针重置为您开始写入的文件开头。

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

相关文章:

c - 溢出错误,RMS 值显示错误

c - 如何将我从C文件中读取的数据保存在数组中

C: 使用 fwrite 将 char 写入不同的行

c - fwrite后目标文件为空c语言

stream - Rikulo流基础文件夹

c++ - 使用包含数组的结构进行 fwrite

c - C 中的同步对象及其与数据结构结构的关联

c - 是什么让线程和进程独一无二?

Java 8 Lambdas flatmapping、groupingBy 和 mapping 以获取 T 和 List<K> 的 Map

Java 输入流 "blocking"和多线程