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

在.c文件中使用.h定义的结构体成员fname报未声明错误如何解决

报错原因

fname是struct filesharing_struct的结构体成员,并非全局作用域的独立变量,必须依附于该结构体类型的实例才能访问,你直接在函数中使用fname,编译器无法识别该变量,因此报未声明错误。

修正后的代码

修改你的shm_fileuploader.c文件如下:

#include "sharedMemory.h"

struct filesharing_struct temp()
{
  // 定义结构体类型的实例
  struct filesharing_struct file_share_obj;
  printf("Enter the name of the file. ");
  // 通过实例访问fname成员,数组名本身为首地址无需取&
  scanf("%49s", file_share_obj.fname);
  // 函数声明有返回值,需返回结构体实例
  return file_share_obj;
}
注意事项
  • 结构体成员访问规则:普通结构体变量使用.运算符访问成员,结构体指针使用->运算符访问成员
  • 原代码中scanf写&fname属于错误用法:fname是字符数组,数组名本身就是首地址,额外加取地址符&会得到指向整个数组的指针,和scanf要求的char*类型不匹配
  • 建议scanf读取字符串时限制长度:上述代码中%49s限制最多读取49个字符,预留1位存储字符串结束符\0,避免输入过长导致缓冲区溢出
  • 额外优化提示:你的头文件sharedMemory.h中直接定义了SIZE、name两个全局变量,如果有多个C文件引入该头文件会触发重定义错误,建议改为头文件中仅写extern声明,变量定义放到单独的C文件中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:06:05