编程新手求助:如何将文件单行内容存入C语言结构体变量并打印
问题分析与代码修正
你的代码存在两个关键问题,导致无法正确将文件内容持久化到main函数的结构体变量中,同时缺少必要的错误检查:
- 结构体参数采用值传递,函数内修改的是结构体副本,main函数中的
me变量不会被更新; - 未检查文件是否成功打开,若文件不存在或无读取权限会触发未定义行为。
以下是修正后的代码:
#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
相关产品推荐
相关产品推荐

