使用scanf输入过长字符串产生的bug

今天在写图书管理系统的时候,发现了一个非常奇怪的bug

当我scanf过长字符到p->isbn时,图1

图2

发现已经输入好的书名竟然发生了改变,

图3

这让我莫名奇妙,就算是控制输入字符长度的语句没有起作用也应该是ISBN发生改变啊,书名怎么会变呢?

一开始想到有没有可能是因为键盘缓冲区,这种bug刚刚就解决一个

但是,在while中加上fflush(stdin);后,结果照旧

没办法,只能调试了

调试时,就在我scanf一个过长的值时,我看到,p->bookname的值也发生了改变,莫名其妙莫名其妙

我想这是不是因为结构体属性之间的内存地址相近甚至相邻而引起的呢,

字符串过长,超出长度的字符就写入到下个地址去了

图4

于是,我在结构体定义里加一行  char test[10];

图111

果然,现在正常了

图5图6


猜你喜欢

转载自blog.csdn.net/kyaa111/article/details/79255985