C++ primer plus第六版课后编程题答案8.3


8.3

#include <iostream>
#include <cctype>
#include<string>
using namespace std;
const int MAX=50;
void change(string &s);
void main83()
{
	string s="chenggSHIguang";
	//char ch='\0';
	change(s);
	while(s!="q"&&(s.length()!=1))
	{
		cout<<"Next string (q to quit):"<<endl;
		getline(cin,s);
		change(s);
	}
	cout<<"Bye"<<endl;
	//cin.get();
	system("pause");

}
void change(string &s)
{
	int size=s.length();

	cout<<s<<"\nsize="<<size<<endl;
	//char ch;
	for(int i=0;i<size;i++)
	{
		//cout<<"i="<<i<<"\nsi="<<s[i]<<endl;
		s[i]=toupper(s[i]);
	}
	cout<<s<<endl;

}

 

我在DEV c++里面却不会出问题,实在是不知道为什么这么神奇

下面是我在DEV c里面测试的源代码

#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);
int main()
{
	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);
	
	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=sizeof(t);//这里出了问题,长度测试错误,当长度超过八个字符是,直接出错!
	cout<<"size="<<size<<endl;
	beany.str=new char[size+1];
	strcpy(beany.str,t);
	int sizeofStr=sizeof(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;
	
}

 

——————————————————————————————————————————————————

//写的错误或者不好的地方请多多指导,可以在下面留言或者给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:https://www.royalchen.com/

author:royalchen

Email:royalchen@royalchen.com

———————————————————————————————————————————————————

 

 


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注