c - 我无法从文件中读取超过 49 个结构数组

标签 c arrays file struct

我有这个代码。当我编译并执行它时,没有显示错误,但是,从第 50 个元素到最后一个元素,这些值超出了 rand() 的区间(我认为是从 0 到 32767)。这是非常出乎意料的,因为程序继续运行,没有显示任何写入错误消息。

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define MAX 100

using namespace std;

struct num {
    int val;
};

int main() {
    FILE *f, *g;
    num data[MAX];

    f = fopen("file1.txt", "w");
    if(f == NULL) {
        printf("Error\n");
        exit(0);
    } else {
        for(int i = 0; i < MAX; i++) {
            data[i].val = rand();
        }
        fwrite(data, sizeof(num), MAX, f);
        if(ferror(f)) {
            exit(0);
        }
        fclose(f);
    }

    num data1[MAX];
    g = fopen("file1.txt", "r");

    if(g == NULL) {
        exit(0);
    } else {
        fread(data1, sizeof(num), MAX, g);
        if(ferror(g)) {
            printf("Error\n");
            exit(0);
        }
        fclose(g);

        for(int i = 0; i < MAX; i++) {
            printf("val %d : %d\n", i+1, data1[i].val );
        }
    }
}

最佳答案

我认为文件打开模式有问题,您选择了依赖于系统的文本模式,将其更改为二进制模式,一切都会按预期工作

文本模式取决于应用程序运行的环境,在不同的输入/输出中可能会发生一些特殊字符转换根据系统特定文本的文本。尽管在相同的环境中,二进制文件模式不会发生任何转换。 二进制模式无需任何转换即可保存和读取数据。

关于c - 我无法从文件中读取超过 49 个结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26106227/

相关文章:

c++ - 在 C/C++ 中读取 OpenOffice 文件

c - 带内存池的动态 VS 静态

MySQL - 从 LOCAL INFILE 加载数据 - 如何提高性能

Char 类型不接受输入

c - 如何在另一个 GdkPixbuf 上复制具有透明背景的 GdkPixbuf

c++ - 使用 bresenham 线算法循环二维数组

java - 检查一个整数数组中是否有两个相同的元素

c++ - 使用指针反转 C++ 中的字符数组

c - 从 C 程序粉碎和删除 linux 中的文件

java - 逐行以相反顺序读取文件,无需太多开销