gets函数的问题
来源:互联网 发布:sql2000数据库无法启动 编辑:程序博客网 时间:2024/05/18 00:36
问题:
#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下这样做肯定会报告段错误。。。
- gets函数的问题
- gets函数有问题?
- gets函数的漏洞
- gets函数的漏洞
- gets()函数的应用
- gets()函数的应用
- gets函数的使用
- 关于gets的问题
- 关于gets()的问题
- 一次有关字符串读取函数gets()问题的调试
- linux c 语言gets函数出现的警告问题
- scanf()函数与gets()函数的区别
- gets函数哈scanf函数的区别
- gets () 函数
- gets函数
- gets函数
- gets()函数
- gets函数
- poj 3233 矩阵乘法经典题
- oracle删除数据文件
- VCPROJ文件详解
- C语言中的!
- Shell脚本学习——[命令之乐]
- gets函数的问题
- WebGoat第四关:Authentication Flaws
- 好基础的面试题
- text段、data段和bss段介绍
- VS2005调试技巧集合
- 督导系统C端总结
- Shell脚本学习——[以文件之名]
- zoj 2788 (dinic递归+非递归)
- IOS5基础教程之二-----基本交互