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

编程新手求助:如何将文件单行内容存入C语言结构体变量并打印

问题分析与代码修正

你的代码存在两个关键问题,导致无法正确将文件内容持久化到main函数的结构体变量中,同时缺少必要的错误检查:

  1. 结构体参数采用值传递,函数内修改的是结构体副本,main函数中的me变量不会被更新;
  2. 未检查文件是否成功打开,若文件不存在或无读取权限会触发未定义行为。

以下是修正后的代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

// 改用更清晰的结构体名称,避免与指针变量名混淆
typedef struct {
    char name[100];
} Person;

// 传递结构体指针,直接修改原变量
void readNameFromFile(FILE* pfile, Person* me)
{
    rewind(pfile);
    char buffer[100];
    // 读取一行内容并检查读取是否成功
    if (fgets(buffer, sizeof(buffer), pfile) != NULL) {
        // 移除fgets读取到的换行符(如果存在)
        buffer[strcspn(buffer, "\n")] = '\0';
        strcpy(me->name, buffer);
    }
}

int main()
{
    FILE* pfile = fopen("text.txt", "r");
    // 检查文件是否成功打开
    if (pfile == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    
    Person me;
    // 传递结构体地址到函数
    readNameFromFile(pfile, &me);
    // 在main中打印结果,验证结构体变量赋值成功
    printf("读取到的名称:%s\n", me.name);
    
    fclose(pfile);
    return 0;
}

关键修改说明

  • 将结构体命名为Person,提升代码可读性,避免与指针变量名冲突;
  • 函数参数改为结构体指针Person* me,确保函数内的修改直接作用于main中的原变量;
  • 添加文件打开状态检查,防止空指针操作;
  • 使用strcspn去除fgets读取的换行符,避免输出时多出空行;
  • 将打印操作移至main函数,验证结构体变量确实被正确赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:40:27