c语言,数据结构,出错

恋无梦 2016-12-09 10:56:14
struct book{
char name[30];
int age;
};

int main(void){
struct book;
//为什么不能这样用
//我使用gets(book.name);输入的字符超过最大值,为什么不会影响到后面的数据
book.name = "hello word!";
book.age = 100;
return 0;
}
...全文
115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-12-09
  • 打赏
  • 举报
回复
引用 3 楼 qq_28482411 的回复:
我的意思是为什么这句话会编译出错 a.name = "hello word!"; 还有使用gets(book.name)的时候输入的个数明显大于定义的数组长度,但为什么没有将相邻的存储区域覆盖了
上面已经说了,没有对数组进行这样赋值的语法,所以是错的 至于长度超过数组大小只是看似正确而已,你可能已经把其他不属于你的数据覆盖掉了
恋无梦 2016-12-09
  • 打赏
  • 举报
回复
已经注意到了,但为什么
恋无梦 2016-12-09
  • 打赏
  • 举报
回复
我的意思是为什么这句话会编译出错 a.name = "hello word!";
还有使用gets(book.name)的时候输入的个数明显大于定义的数组长度,但为什么没有将相邻的存储区域覆盖了
paschen 2016-12-09
  • 打赏
  • 举报
回复
book.name 不是指针,而是数组,所以不能book.name = "hello word!"; 其次book不是对象,而是类名,你不能拿类名来调用成员函数 需要strcpy(xxx.name,"hello word!" ); (xxx是book类型的对象)
小灸舞 版主 2016-12-09
  • 打赏
  • 举报
回复
book.name = "hello word!";应该用strcpy
http://blog.csdn.net/rookie_wei/article/details/38361943
恋无梦 2016-12-09
  • 打赏
  • 举报
回复
谢谢.理解了,首先a.name = "hello word!";这样的用法只能在初始化的时候使用,总是忘了这一点. 其次.我说的那个gets(a.name);如果写入的字符个数过大,确实可以覆盖了a.age的存储区域. book总共占16位 name占10位 age占4位 间隔2位 当name使用字符过大时,将覆盖age内存,改变age的值. 因为存的时候使用字符的方式存的,所以要注意字符对应的数值是多少. 感谢各位的解答.

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧