gets函数的问题


问题:

#include"stdio.h"

int main()
{
char str1[1];
gets(str1);
printf("%s\n",str1);
return 0;
}
为啥我字符串长度限定为1,输入的时候我输入的字符数超过1了,其余的还能打出来?

回答:

呆兔子tbc | 九级
str属于局部变量,局部变量储存在程序的占空间中。
对于32位的程序,栈空间是严格4字节对齐的。
换句话说,如果局部变量占用的内存空间不是4的整数倍,编译器就会把它处理成4的整数倍
具体而言,局部变量 str[1]和str[4]是完全等价的。
如果你输入一个较长的字符串,肯定要出错。

另外,gets函数存在缓冲区溢出漏洞,使用gets函数的程序有缓冲区溢出的风险
如果读入str的是一个精心构造的字符串,就会引起缓冲区溢出,导致程序流程改变。

回答者: dry_land | 四级

错误的做法不一定都会导致不愉快的结果。。你若在linux下这样做肯定会报告段错误。。。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值