码迷,mamicode.com
首页 > 其他好文 > 详细

关于课堂上Exercise#1的讨论

时间:2015-03-14 19:52:50      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

Software Testing_1b-rev page17

Exercise#1

代码内容:

#include <stdio.h>
int main(void)
{
     char buff[10]; 
     memset(buff,0,sizeof(buff));
     gets(buff);
     printf(“\n The buffer entered is [%s]\n”,buff);
     return 0;   
}

这段代码是否存在问题。。。

据我所猜,老师布置的这个作业中没有存在代码的语法问题。那么,问题应该就存在于从数据层面上。

gets()函数是从标准输入设备中读取字符串的函数,但是它可以无限读取,不会判断上限,以回车结束读取。所以,无法限制输入的字符数量的大小。儿buff被定义为一个容量大小只有10的字符数组,当输入的内容超过上界时,程序便会发生溢出。

通过CodeBlocks进行了一下代码测试:(将代码转换成了C++,虽说这样很不科学,但是为了避免使用C语言时的不方便...嗯,你懂的!)

代码如下:

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{
     char buff[10];
     memset(buff,0,sizeof(buff));
     gets(buff);
     cout<<"The buffer entered is "<<buff;
     return 0;

}

 

技术分享

很明显,当输入的数据发生溢出时,程序被迫停止运行。

 

关于课堂上Exercise#1的讨论

标签:

原文地址:http://www.cnblogs.com/ccvamy/p/4338029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!