背景
在写一个用户名和密码登陆的界面逻辑时,使用两个数组来保存用户名和密码
uchar username[11];
uchar password[6];
问题
把username和password作为参数传给写入文本文件函数时,在文件中会看到usernamepassword password这样的字符,把password保存了两次
举例加入username为 12345
password为 0000
写入文本的数据本应该是12345 0000;但实际不是,实际是123450000 0000
在程序中添加打印,看到在获得密码之后,username字符改变了,从12345变成了123450000,
这就是数组的越界访问;
通过打印数组的地址可以发现,username[11]的地址和password[0]的地址是一致的,因此,username的值改变了。
解决方法
通过tempname和temppassword来遍历数组,然后再通过标准库函数中的strncpy函数来复制到username和password中,这样数组的值就不会改变了,继而防止了数组越界访问