HentaiEtoIskusstvo
@HentaiEtoIskusstvo

При копировании данных из одного массива в другой последний элемент копируется с мусорными значениями. Как это устранить?

String::String() {
	m_length = 80;
	m_capacity = 160;
	m_str = new char[m_length] {};
}

void String::setStr(char* str) {
	if (m_length < strlen(str)) {
		return;
	}
	else {
		if (str != nullptr) {
			for (int i = 0; i < strlen(str); ++i) {
				m_str[i] = str[i];
			}
		}
	}
}

void String::ShrinkToFit() {
	String str;
	str.setStr(m_str);

	m_str = nullptr;
	delete[] m_str;
	
	m_str = new char[strlen(str.m_str)];
	setStr(str.m_str);
}

5aa004d8c8a83249300291.png
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Добавь в конце строки символ окончания строки(имеет код 0). А ещё копировать лучше с помощью strncpy
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Kobalt_x
C++ developer
А ты уверен, что память не портится у тебя в setStr() копирование идёт только если длинна строки > длинны буфера, и копируешь ты всю строку целиком, попутно создавая повреждение памяти. Ну и про \0 символ тебе уже написали выше. Вообще есть strdup() но он вне стандарта.
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы