在.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
相关产品推荐
相关产品推荐

