You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何从TXT文件读取数据并存储到结构体与普通变量

问题原因分析
  • 使用fread读取明文文本文件逻辑错误。fread是用于读取二进制格式数据的API,你的input.txt是按行存储的明文内容,和结构体在内存中的二进制布局完全不匹配,直接读取会拿到乱码数据。
  • 存在类型不匹配与未初始化变量操作问题。结构体中value的声明是int类型,你尝试将int*类型的地址&value1赋值给它属于类型错误;同时局部变量value1未初始化就参与赋值,行为完全未定义。
正确实现方案

使用fscanf逐行读取明文内容,依次填充结构体的三个字段即可,代码如下:

#include <stdio.h>
#include <stdlib.h>

struct variable {
    char type[10];
    char name[10];
    int value;
};

int main(){
    struct variable *object2 = malloc(sizeof(struct variable));
    if (object2 == NULL) {
        perror("malloc failed");
        return 1;
    }

    // 读取明文用r模式即可,不需要二进制读取的rb模式
    FILE *file = fopen("input.txt", "r");
    if (file == NULL) {
        perror("open file failed");
        free(object2);
        return 1;
    }

    // 逐行读取三个字段,%s会自动跳过换行、空格等空白符
    fscanf(file, "%s", object2->type);
    fscanf(file, "%s", object2->name);
    fscanf(file, "%d", &object2->value);

    fclose(file);

    // 如果需要将值存储到独立变量,直接赋值即可
    int value1 = object2->value;
    printf("独立变量value1的值:%d\n", value1);
    printf("结构体内容:%s/%s/%d\n", object2->type, object2->name, object2->value);

    free(object2);
    return 0;
}
代码说明
  • fscanf按格式读取内容时,%s会自动跳过换行、空格等空白分隔符,刚好匹配你三行存储的txt内容结构。
  • 如果需要将读取到的数值存储到独立变量,直接从结构体的value成员取值赋值即可,不需要额外的指针操作。

内容的提问来源于stack exchange,提问作者user16836597

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:48:05