在百度知道里面得到了正确的答案
http://zhidao.baidu.com/question/198940026560129285.html?quesup2&oldq=1
#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;};}elsecout<<"str="<<beany.str<<endl;}
void show(const char t[],int count)
{cout<<"Testing show:"<<endl;if(count==0)cout<<"str="<<t<<endl;elsefor(int i=0;i<count;i++){cout<<"Testing show:"<<i<<endl;cout<<"str="<<t<<endl;}}