我正在测试以下代码:
#include<bits/stdc++.h>
using namespace std;
class Stringtype{
char* str;
int length;
public:
Stringtype(){
str='\0';
length=0;
}
Stringtype(const Stringtype& s){
cout<<"Constructor"<<endl;
strcpy(this->str, s.str);
this->length = s.length;
}
Stringtype(char* text){
strcpy(this->str, text);
this->length = strlen(str);
}
friend ostream& operator<<(ostream& stream, Stringtype s){
stream<<"Value :"<<endl;
for(int i=0;i<s.length;i++){
cout<<(s.str)[i];
}
cout<<endl;
stream<<"Length :"<<endl;
stream<<s.length<<endl;
return stream;
}
friend istream& operator>>(istream& stream, Stringtype& s){
cout<<"Enter the string"<<endl<<endl;
s.str = new char[30];
cin>>s.str;
s.length = strlen(s.str);
return stream;
}
};
int main(){
Stringtype s1, s2;
cin>>s1>>s2;
cout<<s1<<s2;
cout<<(s1>s2)<<endl;
cout<<(s1<s2)<<endl;
cout<<(s1==s2)<<endl;
cout<<(s1+s2)<<endl;
return 0;
}
此代码生成以下输出(在正确输入后):
构造
然后崩溃。
我似乎无法理解为什么......
非常感谢任何帮助。谢谢。
答案 0 :(得分:4)
您永远不会为字符串的内部内存表示保留内存。您需要在某个地方{/ 1}} 。否则你将写入你不拥有的内存,这正是这里发生的事情,就在你观察到的输出之后的下一行。
顺便说一句:这里应该没有复制结构,你的签名
new
应为:
friend ostream& operator<<(ostream& stream, Stringtype s){
虽然不会改变你的内存处理错误这一事实。
答案 1 :(得分:0)
请更改以下内容 朋友ostream&amp;运算符&lt;&lt;(ostream&amp; stream,Stringtype s) 至 朋友ostream&amp;运算符&lt;&lt;(ostream&amp; stream,Stringtype&amp; s)
获取字符串s
的参考答案 2 :(得分:0)
尝试初始化str =“”,而不是str ='\ 0';