@AVEN1Q
css js php

Почему выводит крякозябры?

Доброе утро. Подскажите кто знает в чем проблема? Спасибо.
eebe123f9d1b49b786d19a072e49fdfb.PNG
class String {

private:
	char* _string;
	short _length;

public:
	
	String() {
		/*_length = 1;
		_string = new char[_length];
		_string[_length - 1] = '\0';*/
	}
	

	String(const char *s) {
		/*_length = strlen(s) + 1;
		
		cout << _length<<endl;
		_string = new char[_length];
		_string[_length - 1] = '\0';
		
		for (int i(0); i < (_length - 1); i++) {
			_string[i] = s[i];
		}
		_string[_length - 1] = NULL;*/
			
		//cout << "133"<<endl;

		_length = strlen(s) + 1;

		_string = (char*)malloc(_length);
		strcpy_s(_string, _length,s);

		//cout << _string<<endl;
	}

	
	String(const String &s) {
		cout << "String"<<endl;
		/*_length = s._length;
		_string = new char[_length];

		for (int i(0); i < (_length - 1); i++) {
			_string[i] = s._string[i];
		}
		if (_string[_length - 1] != '\0') { _string[_length - 1] = '\0'; }*/
	}
	

	~String()
	{
		free(_string);
	}

	String& operator = (const String &s) {
		
		//if (this == &s) {
		//	return *this;
		//}
		//cout << "asdf";
		_length = s._length;
		_string = s._string;

		return *this;
	}

	int length() {
		return _length;
	}

	bool empty() {		
		return _string[0] == '\0';
	}

	friend ostream& operator <<(ostream & os, const String& s) {
		cout<< s._string<<endl;
		os << s._string;
		return os;
	}
};

int main() {

	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	

	// Class String
	String  s;

	s = "mama myla ramy!";

	cout << s;

	cout << s.length() << endl;


	system("pause");

	//s = "";

	cout << s.length() << endl;

	if (s.empty())
	{
		cout << "Empty" << endl;
	}

	

	_getch();
	return 0;
}
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 1
15432
@15432
Системный программист ^_^
В операторе = вы копируете указатель, память по которому может быть очищена в будущем.
Нужно выделять память и копировать данные
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы