第十八章 30限制数组越界 简单

// 30限制数组越界
// 该函数有一个参数即数组的下载length, 下标值length会传递到函数体中进行判断,假如下标超过数组的长度,那么返回数组长度-1,也就是最后一个可见字符,假如不超过数组长度,那么返回该下标的数组元素
/*#include <iostream>
using namespace std;
class String
{
public:
	String(); //默认的构造函数
	String(const char*const ch); //构造带值的string
	int getlen()const { return len;}   //读取长度
	const char *getstr()const{ return str;} //读取字符串    
	//这里是可以修改的
	char &operator[](int length);	
private:
	int len;
	char *str;
};
//创建一个空的str变量
String::String()
{
    len = 0;
	str = new char[1];
	str[0] = '\0';
};
String::String(const char*const ch)
{
	cout<<"带一个参数的构造函数"<<endl;
	len = strlen(ch);
	str = new char[len+1];
	for(int i=0; i<len; i++){
	   str[i] = ch[i];
	}
	str[len] = '\0';
};

char & String::operator[](int length)
{
		if(length > len){
		   return str[len-1]; //返回可见字符的值
		}else{
		   return str[length];
		}
};
int main()
{
	String str;
	cout<<str.getstr()<<endl;
	cout<<"str:"<<str.getlen()<<endl;

	String s1("hello word");
	//cout<<s1.getlen()<<endl;
	cout<<s1.getstr()<<endl;
	cout<<"s1:"<<s1.getlen()<<endl;

	char*temp = "help me";
	String s3(temp);
	cout<<s3.getstr()<<endl;
	cout<<"s3:"<<s3.getlen()<<endl;
	
	//越界的值
	cout<<"越界的值"<<endl;
	cin>>s3[999];
	cout<<s3.getstr()<<endl;
	cout<<"s3:"<<s3.getlen()<<endl;
	cout<<"s3[999]:"<<s3[999]<<endl;
    return 0;
}*/

  

原文地址:https://www.cnblogs.com/xiangxiaodong/p/2700764.html