重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、另外,“字符串不是总是以\0作为串的结束符”,答案是肯定的,不然puts()函数就不能在合适的地方停下来了。这里st[15]被gets()函数赋值为\0。
成都创新互联-专业网站定制、快速模板网站建设、高性价比玉环网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式玉环网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖玉环地区。费用合理售后完善,10余年实体公司更值得信赖。
2、谈不上“危险”,gets() 函数从标准输入读入 一行文本,直到读到 新行符 或 EOF 字符 之前,不会停止读入文本。也就是:gets() 不检查边界。
3、因为您定义的x为字符型数据,那么它对应的输入输出格式符为%c,但是您在输入语句中写的是%s,是字符串格式,不符合字符型单个变量的输入输出。
1、是的,如果这是某书上的做法,那么,我只能说它为你们提供了一个错误的榜样。这样使用gets()已经发生了溢出!这是gets()不检查数据边界的bug造成的。
2、这是对程序产生BUG,出现不可靠性的一个描述,有些函数在某些意外情况会导致程序陷入不可控状态,仅仅是PC上运行最多也就是退出而已,但是如果是运行在飞机等系统里的话,就会有大麻烦,说危险也不为过。
3、gets确实是不安全的,因为无法知道该函数返回的数据有多长。
4、gets(a);当你输入的东西远比12要长时,他还是会接收并写入空间。这样就溢出了,覆盖掉后面的相应空间。也就是说他写入了不该他来写的东西。如果写得设计好点,完全可以通过这个去完成一些不好的事情。
5、gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。
6、C语言的gets函数一般包含在stdio.h头文件里,如果没有包含比头文件那可能会有问题。第二种情况包含了还出问题,说明你的编译器已经不支持这个函数了,这个函数非常不安全,容易造成溢出,建议换成fgets函数。
1、因为您定义的x为字符型数据,那么它对应的输入输出格式符为%c,但是您在输入语句中写的是%s,是字符串格式,不符合字符型单个变量的输入输出。
2、scanf_s(%d%s%f%f%f, &pStu[i].num,pStu[i].name,... // %s对应的是数组pStu[i].name,不需要&。
3、没有代码,不太好判断。但是荣异常看,应该是溢出问题。我怀疑是你打开文件的时候,没有判断fopen函数的返回值是否为NULL,就往里写东西。fp = fopen();然后判断fp是否为NULL。如果不是这个原因,建议把代码发出来。
4、在C语言中,如果 standalone 是一个字符串,要判断是否等于 yes (区分大小写)的话,应该是要先包含头文件string.h,然后用函数表达式 strcmp(standalone,yes)==0 来表示的。