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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ladari
1 / 1 / 0
Регистрация: 09.05.2013
Сообщений: 16
#1

Откуда берутся лишние элементы? - C++

18.06.2014, 21:32. Просмотров 317. Ответов 10
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
String String::operator + (String right){
 
    int len = strlen(this->myString) + strlen(right.myString);
 
    cout << len<< endl;// 14
 
    char *temp1 = new char[len+1];
 
    cout << "temp " << strlen(temp1) << " temp *" << endl;//32
}
Почему 32? Мучаюсь долго, но никак не доходит откуда берется 32(((
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 21:32     Откуда берутся лишние элементы?
Посмотрите здесь:

C++ Проблема: создаются лишние элементы в бинарном дереве
Удалить из массива «лишние» элементы C++
Описать процедуру RemoveForInc(A, N), удаляющую из веществен- ного массива A размера N «лишние» элементы C++
Откуда берутся все символы после моей строки? C++
C++ Лишние символы берущиеся неведомо откуда
C++ Откуда берутся странные числа?
C++ Поведение setw(). Откуда берутся начальные отступы, начиная со 2 строки?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2014, 21:35     Откуда берутся лишние элементы? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
strlen() ищет '\0' в строке, а где он там?
Ladari
1 / 1 / 0
Регистрация: 09.05.2013
Сообщений: 16
18.06.2014, 21:46  [ТС]     Откуда берутся лишние элементы? #3
Спасибо. Дописала код:
C++
1
temp1[len+1] = '\0';
и все работает.
Croessmah
Модератор
Эксперт CЭксперт С++
12695 / 7169 / 800
Регистрация: 27.09.2012
Сообщений: 17,677
Записей в блоге: 2
Завершенные тесты: 1
18.06.2014, 21:50     Откуда берутся лишние элементы? #4
Цитата Сообщение от Ladari Посмотреть сообщение
и все работает.
везет.
При
C++
1
char *temp1 = new char[len+1];
последний элемент имеет индекс len
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2014, 21:51     Откуда берутся лишние элементы? #5
Цитата Сообщение от Ladari Посмотреть сообщение
Дописала код:
По идее, в память нужно строку, составленную из двух (конкатенация), поместить, тогда и '\0' там появится.
Ladari
1 / 1 / 0
Регистрация: 09.05.2013
Сообщений: 16
18.06.2014, 22:15  [ТС]     Откуда берутся лишние элементы? #6
Мне было бы гораздо проще написать бы все через тип String и конкатанацию, но вот в универе требуют через char*.
Когда я не дописываю "\0" мне добавляет море кракозябликов разных.

У меня возникла последняя бага.

Перегрузку оператора + сделала, а с минусом у меня откуда-то берется равно. Причем ставится на 2 место и выводится до начала слова.

Слева у меня передается объект, а справа символ. Если символ равен "#", то мне надо вычесть его из свойства объекта типа char*.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
String String::operator - (char right){
    int countSymbol = 0;
    
    if(right == '#'){
             /* считаем количество символов # для определения длины новой строки без # */
 
        for(int i = 0; i < this->Length(); i++){
            if(this->myString[i]== '#'){
                countSymbol++;
            }
        }
        int newLen = this->Length() - countSymbol;
 
                /* выделяем память для новой строки без # */
        char *temp2= new char[newLen+1];
        temp2[newLen+1] = '\0';
 
        for(int i = 0; i < this->Length(); i++){
            if(this->myString[i] != '#'){   
                cout << temp2[i];
                temp2[i] = this->myString[i];
                
            }
        }
        
        String newStr(temp2); 
        return newStr;
    } else {
        return *this;
    }
Сейчас скину консольку.
Миниатюры
Откуда берутся лишние элементы?  
Croessmah
Модератор
Эксперт CЭксперт С++
12695 / 7169 / 800
Регистрация: 27.09.2012
Сообщений: 17,677
Записей в блоге: 2
Завершенные тесты: 1
18.06.2014, 22:19     Откуда берутся лишние элементы? #7
C++
1
2
        char *temp2= new char[newLen+1];
        temp2[newLen+1] = '\0';
Запись за пределы выделенной памяти.
Ladari
1 / 1 / 0
Регистрация: 09.05.2013
Сообщений: 16
18.06.2014, 22:24  [ТС]     Откуда берутся лишние элементы? #8
C++
1
2
char *temp2= new char[newLen+1];
temp2[newLen] = '\0';
При любой другой записи у меня много разных лишних символов. Но почему на 2 место ставится = для меня пока загадка. =(
Миниатюры
Откуда берутся лишние элементы?  
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2014, 22:33     Откуда берутся лишние элементы? #9
Цитата Сообщение от Ladari Посмотреть сообщение
Мне было бы гораздо проще написать бы все через тип String и конкатанацию, но вот в универе требуют через char*
Разве нет функций для конкатенации Си-строк? strcat() ???
Ladari
1 / 1 / 0
Регистрация: 09.05.2013
Сообщений: 16
18.06.2014, 22:44  [ТС]     Откуда берутся лишние элементы? #10
согласна. А вот для удаления символа я не нашла встроенного метода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 22:54     Откуда берутся лишние элементы?
Еще ссылки по теме:

Откуда берутся лишние символы при создании массива с помощью оператора new? C++
Массив: Удалить в заданном массиве действительных чисел «лишние» (кроме первого) элементы C++
C++ Почему в list записываются лишние элементы?
Откуда берутся символы при ошибках? C++
Откуда берутся лишние цифры в double? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Jewbacabra
Эксперт PHP
2052 / 1716 / 629
Регистрация: 24.04.2014
Сообщений: 4,889
18.06.2014, 22:54     Откуда берутся лишние элементы? #11
Цитата Сообщение от Ladari Посмотреть сообщение
При любой другой записи у меня много разных лишних символов.
C++
1
2
char *temp2= new char[newLen+2];
temp2[newLen+1] = '\0';
Цитата Сообщение от Ladari Посмотреть сообщение
Но почему на 2 место ставится = для меня пока загадка. =(
Цитата Сообщение от Ladari Посмотреть сообщение
C++
1
2
3
4
5
6
for(int i = 0; i < this->Length(); i++){
if(this->myString[i] != '#'){ * 
cout << temp2[i];
 temp2[i] = this->myString[i];
}
}
C++
1
2
3
4
5
6
7
8
int j = 0;
for(int i = 0; i < this->Length(); i++){
            if(this->myString[i] != '#'){   
                cout << temp2[i];
                temp2[j] = this->myString[i];
                ++j;
            }
        }
Yandex
Объявления
18.06.2014, 22:54     Откуда берутся лишние элементы?
Ответ Создать тему
Опции темы

Текущее время: 02:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru