Witam! Mam za zadanie zaimplementować własną klasę String zawierającą pola napis jako char* i długość tego napisu jako int.
Jednak w poniższym kodzie dzieje się coś złego ;( gdy String ma długośc 8-10 znaków pojawiają się "krzaki". Macie jakiś pomysł? Podejrzewam memcpy.
#include <cstdlib>
#include <iostream>
using namespace std;
class String{
char * napis;
int dlugosc;
public :
String(const char* nap){
dlugosc=strlen(nap);
napis = new char[dlugosc];
(char*)memcpy(napis,nap,dlugosc);
}
String(int dlugosc){
dlugosc=dlugosc;
napis=new char[dlugosc];
}
~String(){
cerr<<"usuwam "<<this->napis <<endl;
delete [] napis;
}
int strlen(const char* source) { //metoda obliczająca długość napisu char*
const char* s = source;
while ( *s++ );
return s-source-1;
}
//konstruktor kopiujący
String(const String &s){
dlugosc=s.dlugosc;
napis=new char[s.dlugosc];
(char*)memcpy(napis,s.napis,s.dlugosc);
}
int length(){
return (*this).dlugosc;
}
friend ostream& operator<<(ostream&, const String&);
};
ostream& operator<<(ostream& s, const String& str) {
return s <<str.napis;
}
int main(int argc, char *argv[])
{
String* p1=new String("1234567");
String* p2=new String("12345678");
String* p3=new String("123456789");
String* p4=new String("123456789ab");
cout<<*p1<<endl;
cout<<"dlugosc "<<p1->length()<<endl;
cout<<*p2<<endl;
cout<<"dlugosc "<<p2->length()<<endl;
cout<<*p3<<endl;
cout<<"dlugosc "<<p3->length()<<endl;
cout<<*p4<<endl;
cout<<"dlugosc "<<p4->length()<<endl;
system("pause");
return 0;
}