Как исправить ошибку «Buffer is too small» C++?

Работаю с классами. Нужно сделать конкатенацию двух char массивов с пробелом между ними. Написал вот такой код :

String String::concat(const String& other)
{
	String result;
	
	char space[3]{ "  \0" };
	strcat_s(result.string_, strlen(string_) + strlen(space) , string_);
	strcat_s(result.string_, strlen(string_) + strlen(space), space);
	strcat_s(result.string_, strlen(result.string_) + strlen(other.string_) + strlen(space), other.string_);

	return result;
}


Во время первой конкатенации все идет хорошо, но вторая вызывает исключение "Buffer is too small". Когда я стараюсь исправить ошибку чистой(delete[]) массива result и переопределением его наново. В таком случае также вызывается ошибка но уже другая — "String is not null terminated".
Помогите пожалуйста.
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Drottarutarnum
Web, Embedded and C#
Преобразуй массивы в строки (в гугле c++ char to string)
А после result = string1 + " " + string2
Ответ написан
@none7
Ошибка в том, что все сишные строки они null-termanated и strlen этот '\0' не учитывает при подсчёте длины строки. В первой строке оно работает по ошибке, так как не должно быть там strlen(space). Вообще это совершенно дурной способ использования функции strcat_s, ведь второй параметр это не длина копируемой строки, а максимально возможная длина буфера, который 80 байт. В таком виде очень даже возможно переполнение буфера.
Ответ написан
Ваш ответ на вопрос

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

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