常见的数组越界问题的一些解决办法
之前在练习一些关于c/c++中的字符数组时,遇到了一些个人感觉比较难受的数组越界的问题;于是就想着能不能在代码中加进一些关于数组越界检查的语句进行,这样就避免了在输入时,由于数组越界而产生一些类似于无法继续读取字符串的问题
直接进入正题:
首先,下面是我的原始代码
// the new and delete.cpp : 定义控制台应用程序的入口点。
//
#include<iostream>using namespace std;int main()
{int n;cout<<"just enter a value of n:"<<endl;cin>>n; int i=0;char *q=new char[n];//动态分配内存cin.sync ();//用于清空缓冲区的函数while(i<n){if((q[i]=cin.get())=='\n')//cin.get()函数从输入流中读取一个字符到q[i]//这里设置回车为字符串结束标志break ;elsei++;}q[i]='\0';cout<<"the string you input is:"<<q<<endl;delete []q;q=NULL;return 0;
}
于是当输入的字符没有越界的时候这时候是正常运行的;但是如果你对于自己的输入过于自信又按了"Enter"的时候,就会产生像下面这样的错误
程序无法继续进行,更不能将 输入的字符全部输出;而我们进入调试
发现当进行到数组上限3时;i此时的值是3也就是该数组的第四个元素而我们的代码中q[i]=’\0’这一句正好将着第四个元素设置为结束;导致我们在delete时q的内存内存发生了一些变化,无法继续进行;
解决方法:
1、这也是我想的第一种方法
直接在q[i]=’\0’;这一句改,改为q[i-1]=’\0’;这再进行编译运行
这样我们的程序就能正常结束了
2、加入一个数组越界的检查提示;这样就能更加地完善也更加规范
#include<iostream>
using namespace std;
int main()
{int n;cout<<"just enter a value of n:"<<endl;cin>>n; int i=0;char *q=new char[n];//动态分配内存while(1){cin.sync ();//用于清空缓冲区的函数while(i<n){if((q[i]=cin.get())=='\n') //cin.get()函数从输入流中读取一个字符break ;elsei++;}if(i>=n)//假如数组越界{q[n-1]='\0';//数组最后一位设置成字符串结束符i=0;//重置循环变量的值,跳出if语句之后进入外部循环继续输入cout<<"array bound!please re-input:"<<endl;}else//如果并未产生数组越界{q[i]='\0';//最后一位数组元素设置成结束符break ;}
}cout<<"the string you input is:"<<q<<endl;delete []q;q=NULL;return 0;
}
编译运行-》
在程序中用到地cin.sync()函数的作用是将输入流缓冲区中的输入序列全部清除;在程序中使用主要是避免之前一次的输如的字符‘\n’影响下次的正常输入;
这里只是给出了一些我所犯的错误,很难说列举出所有关于数组越界的问题;希望我这便文章对大家有些帮助,欢迎交流~
常见的数组越界问题的一些解决办法相关推荐
- 关于一些常见智柜问题的分析及解决办法
竟然还有小伙伴感觉自研项目不好的小伙伴? 渐渐感觉不管是在小公司或者在大公司,能有一个值得奋斗的远方就可以了,比如薪资高,钱多事少离家近,自己真的对自己目前做的事情感兴趣,否则干啥都感觉没劲,尤其是在 ...
- android zip解压出错,常见的压缩解压文件出错解决办法
您是否遇到过精力了好久下回来的压缩吧,结果在解压过程中出现错误的情况呢?比如说此解压失败或压缩文件文件已经损坏?导致解压文件失败.如果遇到这种问题,那就试试常见的压缩解压文件出错解决办法吧.凡事求人不 ...
- Android两种常见错误(ANR和FC)解决办法
ANR(Activity Not Respone)(无响应) 先介绍下Main线程(也称为UI线程.主线程) 功能: 1.创建UI控件 2.更新UI控件状态 3.事件处理 限制:Main线程不建议有超 ...
- ECONNABORTED,Socket 常见连接错误之一,原因分析 + 解决办法
原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重. 前言 通过本篇,你将简单了解到 Socket 连接错误-- ECONNABORTED [产生的原因],还有[避免的方法],结论直接见最后的 ...
- 四种常见的GPS北斗定位模块问题及解决办法
GPS北斗定位模块使用上大多需要配置和设置下的,因此出现应用方面的问题也是可以理解的,下面罗列几项常见的使用问题及解决办法: 1. 在家或个别位置搜不到信号,定位模块靠直接接收卫星信号工作,可能是其他 ...
- 常见的 ChatGPT 相关错误提示及解决办法
我汇总了一些大家在使用 ChatGPT 过程中,可能会遇到的一些问题以及相关错误提示,大家可以根据遇到的情况查看解决办法. 注册登陆问题: 错误提示:Too many signups from the ...
- 一些简单常见的网站反爬策略和解决办法
目录 1.User-Agent(请求头header中的一个属性) 2.IP(IP地址是指互联网协议地址) 3.Cookie(储存在用户本地终端上的数据),对简单的一些cookie反爬进行说明 4.po ...
- 常见的网站登录验证码种类及其解决办法
在爬虫开发时,大家经常会遇到验证码识别,在网站中加入验证码的目的是加强用户安全性和提高反爬虫机制,有效防止对某一特定注册用户用特定程序暴力破解的方式不断地进行登录尝试.在此为大家介绍一下验证码的种类. ...
- css设置ie浏览器的样式,IE浏览器常见的9个css Bug以及解决办法
我们在浏览网页的时候经常看见这样的现象:某个网页在IE6浏览器中打开很正常,但是在IE8里面打开可能完全变形了.或者也有可能出现完全相反的现象.这让Web程序员及设计师往往为了其CSS在各个IE版本下 ...
最新文章
- 最后1周 | 高级转录组分析和R语言数据可视化第十一期 (报名线上课还可免费参加线下课)...
- string转date类型_10:Wrapper;String;Date;Math;File;Enumeration;Syst
- 015_SpringBoot视图层技术thymeleaf-URL表达式
- SAP用户权限相关操作
- 右键菜单无响应_给电脑添加右键菜单重启资源管理器,让电脑不再死机!
- U-Boot顶层Makefile分析
- select函数(一)
- ASP.NET技巧:使Div内内容可编辑
- python dlib gpu ubuntu conda_Ubuntu 下编译支持 GPU 的 TensorFlow 和 Dlib
- 发布 CodeAuto 代码生成器 2.1.0.461 中英文双语版
- paip.设置鼠标灵敏度API
- 四十一 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查...
- 简单集成华为PUSH
- 【Android】Instant Run原理解析
- 软破ps3安装linux,软破PS3安装大于4GB的PKG文件详细教程
- student dictionary
- 桌面壁纸 Lively wallpape
- 爬取豆瓣电影动画排行榜
- ubuntu16.04下解决wps无法使用五笔输入中文的问题
- 数据可视化-豆瓣影评数据分析(FineBI)