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; } }
——————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:https://www.royalchen.com/
author:royalchen
Email:royalchen@royalchen.com
———————————————————————————————————————————————————