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

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

Войти через центр авторизации
Похожие вопросы