为啥这段运行会崩溃啊(语言-c语言)

我是想限制输入10个字符但一运行就崩溃了,而且偶尔还可以通过,是为什么呢

img

img

你name字符数组长度要设置大一些
不要只设置name字符数组长度为10或者11
当输入的字符超过10个数组下标就越界了
c语言中数组下标溢出不会报错, 多于的字符会写入到数组分配空间之后的未知空间中,
虽然可以这样但不安全。因为这个内存空间可能会分配给其它变量,当这个变量的值改变时数组也就受到影响。

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

scanf读取字符串的时候,如果字符串的长度超出了name数组的大小,就会导致name数组无法正常结束,也就是通过strlen计算长度的时候,得到的是一个不确定的值。因为,strlen在计算字符串长度的时候,会从数组开始的地址,一直到遇见'\0'字符为止,而如果输入的字符串长度超出了name数组的大小,那么name数组之后的内存可能会被分配给其他变量,也就导致无法预测到什么时候出现'\0'这个字符,所以,strlen也就无法计算出pp->name的长度。
最简单的解决方法就是在定义结构体的时候,把name数组的大小定义的大一些,给'\0'留出位置,这样才能保证strlen计算的时候能够得到正确的长度。

崩溃的问题:
你输入2的时候崩溃,应该是while循环结束后导致的崩溃,你可以在while结束后的代码中加一些打印语句,看看在哪个地方崩溃的。还有个问题,if(fp==NULL){}这里,应该return 0; 否则if语句后面写文件的代码还会执行,这时候容易出错。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632