
编译出来只说明程序没有语法错误,不说明没有逻辑错误,有错误一般会有屏幕输出,此其一。第二,可以在程序中设定一些输出语句或断点观察。第三如果程序不输入、输出内容,程序执行是当然看不见东西(不直观)。第三如果程序一值运行无法退出,说明存在“死循环”。
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
C语言的gets函数一般包含在stdio.h头文件里,如果没有包含比头文件那可能会有问题。第二种情况包含了还出问题,说明你的编译器已经不支持这个函数了,这个函数非常不安全,容易造成溢出,建议换成fgets函数。
函数原型:
char *fgets(char *buf, int bufsize, FILE *fp)
参数解释:
参数一是输入字符串存放地址,
参数二是存放地址最大容量,
参数三是从哪里输入,可以从文件也可从输入设备,如果从输入设备输入这个参数可以写成stdin,如果从文件输入此参数为文件指针。
返回值:
输入成功返回参数一,失败返回NULL.
补充知识:
为什么gets不让用呢,我们可以看它的原型:char *gets(char *buf)
这个函数可以一直输入知道换行或者EOF,它并不考虑buf空间是否足够大能放下,这就容易导致溢出,有些别有用心的人就会利用这个漏洞去攻击你的程序。
而fgets可以通过第二参数保证不会读入超过buf空间的字符。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)