Dodawanie c-stringu do klasy.

0

No, więc mam pytanie dotyczące łączenia c-stringów. Otóż mam przeładować operator dodając do łańcucha znaków - łańcuch znaków z klasy. No i jak problem z dodawaniem c-stringów jako obiekty klasy rozwiązałem bez większych problemów to dodawanie do obiektu klasy łańcucha znaków sprawiło mi problemy.
Więc mam taką klasę:

class String
{
private:
	char *str;		//wskaźnik ciągu
	int len;		//długość ciągu
	static int num_strings; //liczba obiektów klasy
	static const int CINLIM = 80;
public:
	/.../
	friend String & operator+(const char* ok, String &s);
	static int HowMany();
};

Wyciąłem resztę metod klasy, bo nie są tutaj potrzebne. A teraz samo przeładowanie.

String & operator+(const char* ok, String & s)
{
	int dlugosc = sizeof(ok);
	if(dlugosc == 0)
		return s;
	char *temp = new char [s.len+1];
	strcpy(temp, s.str);
	delete [] s.str;
	s.str = new char [s.len+dlugosc+1];
	strcpy(s.str, ok);
	strcpy(s.str, temp);
	return s;
}

I jest tutaj mały problem. Otóż napis się do klasy po prostu nie dodaje. Gdy później chcę zobaczyć efekt to gdy przychodzi połączyć łańcuch z klasą to na wyjściu dostaję część znajdującą się w klasie, ale bez doklejonego łańcucha. W czym więc jest problem? Nie można zastosować sizeof? Jeśli tak to macie może na to jakąś radę.
Z góry dziękuję za odpowiedź :).

1
  1. char* + String powinno chyba zwrócić char* a nie String...
  2. strcpy będzie ci przecież kopiowało od początku bufora! Musisz użyć strcat() zamiast tego drugiego strcpy...
1

Zrób operator String+String oraz konstruktor z char* i zacznie działać: String=char*+String, String=String+char*;
sizeof(ok); - zwróci ci zawsze 4 (dla 32 bitowych kompilatorów), dla innych 2 lub 8.

1 użytkowników online, w tym zalogowanych: 0, gości: 1