使用结构体获取好友姓名与出生日期的程序出现垃圾值问题
程序输出垃圾值的常见成因
结构体变量未初始化
定义结构体变量时如果没做初始化,成员会保留内存里的随机垃圾数据。如果输入操作失败,这些垃圾值就会被直接输出。输入函数参数错误
使用scanf读取数据时,最容易踩的坑是没传对变量的地址:比如读取出生日期的dd/mm/y时,漏加&符号,导致scanf无法把输入值写入对应的结构体成员,成员还是初始的垃圾值。另外,格式控制符和变量类型不匹配(比如用%s读整数)也会导致输入失败。
举个错误示例:scanf("%s %d %d %d", friend.name, friend.dob.dd, friend.dob.mm, friend.dob.y);这里friend.dob.dd没加&,完全读不进值。结构体定义或变量引用错误
比如嵌套的dob结构体成员类型定义错误(比如把int写成char),或者输出时写错了成员名(比如把friend.dob.y写成friend.y),都会导致访问错误的内存区域,读出垃圾值。内存溢出(可能性较低但需排查)
如果存储姓名的字符数组长度不够,输入的字符串可能溢出,覆盖掉dob成员的内存,导致日期数据被破坏。
内容的提问来源于stack exchange,提问作者REVA
相关产品推荐
相关产品推荐

