C++primer plus第六版课后编程题答案8.4(补)

8.4发现忘记发上来了,现在补上。

8.4

#include<iostream>
#include <string>//出问题时,使用的是cstring,但换成string一样出问题
using namespace std;
struct stringy{
	char *str;
	int ct;
};
void set(stringy &beany,const char t[]);
void show(const stringy &beany,int count=0);
void show(const char t[],int count=0);
void main84()
{
	stringy beany;
	char testing[]="Reality isn't what it used to be.";
	//char testing[]="Reality";//what it used to be.";
	set(beany,testing);
	show(beany);
	show(beany,2);
	testing[0]='D';
	testing[1]='u';
	show(testing);
	show(testing,3);
	show("Done!");
	cout<<beany.str<<endl;
	cout<<"here is in"<<endl;
	
	if(beany.str!=NULL)	//总会引起中断,说是堆损坏
	{
		delete []beany.str;
		cout<<"no null"<<endl;
	}
	else 
		cout<<"str is null";

	system("pause");
	


}

void set(stringy &beany,const char t[])
{
	//delete beany.str;
	int size=strlen(t);//在这里,t已经退化成了一个指针,不能用sizeof获取长度!!!
	//int size=sizeof(t);//这里出了问题,长度测试错误,当长度超过八个字符是,直接出错!
	cout<<"size="<<size<<endl;
	beany.str=new char[size+1];
	strcpy(beany.str,t);
	int sizeofStr=strlen(beany.str);
	cout<<"Sizeofstr="<<sizeofStr<<endl;
	beany.ct=size;


}

void show(const stringy &beany,int count)
{
	cout<<"Stringy show"<<endl;
	if(count!=0)
	{
		for(int j=0;j<count;j++)
		{
			//cout<<"in stringy here!"<<j<<endl;
			//cout<<"Stringy show"<<j<<endl;
			cout<<"str="<<beany.str<<endl;
		};
	}
	else
		cout<<"str="<<beany.str<<endl;
	
}
void show(const char t[],int count)
{
	cout<<"Testing show:"<<endl;
	if(count==0)
		cout<<"str="<<t<<endl;
	else
		for(int i=0;i<count;i++)
		{
			cout<<"Testing show:"<<i<<endl;
			cout<<"str="<<t<<endl;
		}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值