数组的越界访问

在编写登录界面逻辑时,发现将username和password数组传给文件写入函数时出现错误,password值覆盖了username的末尾。原因在于username[11]和password[0]地址相同,导致数组越界。解决方案是使用临时变量遍历数组,然后利用strncpy安全地复制到username和password,防止值改变和越界访问。
摘要由CSDN通过智能技术生成

背景

        在写一个用户名和密码登陆的界面逻辑时,使用两个数组来保存用户名和密码

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中,这样数组的值就不会改变了,继而防止了数组越界访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值