道理很简单,gets 需要的参数为字符串数组首地址,而不是结束地址,更不能是结束地址再+1(结束地址是booknumber[29] )。
你用booknumber booknumber[0] 都是可以的,你用booknumber[30],那么gets试图往booknumber数组实际内存之后的一个字节开始写入,那么实际上就越界了,写到哪里就鬼知道了。
下面printf也是一样的问题。
你用book _book 创建的是一个指针,而指针只是用来存放地址的,并没有分配的空间,若要分配空间,C语言用malloc
看样子你是想创建一个连续的book结构体,但是用法就太乱了,报错是因为char数组的问题,比如你想打印booknumber字符串,那应该
printf("%s",_book->booknumber)
booknumber[30]是第31个个字符(从0 开始),是元素,不是地址,虽然你创建时到30,但用的时候只能到29
问题还远不止这些,建议多看看指针相关的资料
gets里面需要的是:char * 型,而你调用的booknumber是char型,
解决:
把结构体里面的booknumber定义为char * 型;