Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

String is not null terminated - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ как подключать системные файлы в визуал с++ 2012 http://www.cyberforum.ru/cpp-beginners/thread784320.html
подскажите пожалуйста как подключать системные файлы в визуал с++ 2012, например что бы написать прогармму для выключения компа
C++ Hello World! Доброго времени товарищи. Не могу никак найти тему. Где-то на этом форуме есть целая тема в которой предствалена огромная куча вариантов программы, которая выводит на экран надпись "Hello World!!!". ... http://www.cyberforum.ru/cpp-beginners/thread784300.html
C++ последовательность и запись исправте ошибки
Условия задания 1: Найти среднее арифметическое положительных элементов данной последовательности. Условия задания 2: В выходную последовательность записать только те числа, которые меньше суммы...
C++ нужно исправить ошибку в коде) кому не тяжело
#include <iostream> using namespace std; template< class T > void insertSort(T* a, int size) { T tmp; for (int i = 1, j; i < size; ++i) // цикл проходов, i - номер прохода { ...
C++ Удалить из матрицы А (7х5) все строки, сумма элементов которых четна, а из матрицы В (6х8) – строки, сумма элементов которых нечетна http://www.cyberforum.ru/cpp-beginners/thread784265.html
Удалить из матрицы А (7х5) все строки, сумма элементов которых четна, а из матрицы В (6х8) – строки, сумма элементов которых нечетна.
C++ Битовые операции (операция сложения двух целых положительных чисел) Пишу сюда, потому что времени остается мало, а сам решить никак не могу. Мне нужно написать программу программу, которая моделирует операцию сложения двух целых положительных числа (как ее выполняет... подробнее

Показать сообщение отдельно
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153

String is not null terminated - C++

12.02.2013, 00:22. Просмотров 1909. Ответов 9
Метки (Все метки)

Почему появляется ошибка в данном куске кода?

C++
1
2
3
4
5
6
7
8
9
10
11
String String::operator+ (const String &right)
{
    String temp;
    temp.length = this->length + right.length + 1;
    delete [] temp.sPtr;
    temp.sPtr = new char[temp.length];
    assert(sPtr != 0);
    strcpy_s(temp.sPtr, this->length + 1, this->sPtr);
    strcat_s(temp.sPtr, right.length + 1, right.sPtr);
    return temp;
}
Вылазит сообщение String is not null terminated.
Первая строка (strcpy) копирует включая нулевой символ, так как length + 1.
Вторая строка (strcat) находит этот нулевой символ и начинает оттуда копировать дальше, тоже включая нулевой символ.

Добавлено через 19 минут
Окей почитал доки, заменил предыдущий код на
C++
1
2
3
4
5
6
7
8
9
10
11
String String::operator+ (const String &right)
{
    String temp;
    temp.length = this->length + right.length;
    delete [] temp.sPtr;
    temp.sPtr = new char[temp.length + 1];
    assert(sPtr != 0);
    strcpy_s(temp.sPtr, temp.length + 1, this->sPtr);
    strcat_s(temp.sPtr, temp.length + 1, right.sPtr);
    return temp;
}
Но в результате тогда не работает следующий.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const String &String::operator= (const String &right)
{
    if (&right != this)
    {
        delete [] sPtr;
        length = right.length;
        sPtr = new char[length + 1];
        assert(sPtr != 0);
                //вот эта следующая строка выдает Buffer is too small
        strcpy_s(sPtr, length + 1, right.sPtr);
    }
    return *this;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru