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

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

Войти
Регистрация
Восстановить пароль
 
ComputerMouse
6 / 6 / 3
Регистрация: 06.11.2012
Сообщений: 254
#1

Const аргумент изменяется - C++

08.01.2014, 03:45. Просмотров 371. Ответов 13
Метки нет (Все метки)

C++
1
2
3
4
5
6
str (const char *b)
{
    std::cout << b << std::endl;
    pbase = new char;
    std::cout << b << std::endl;
}
str() — конструктор. Первая и третья строчки функции (отображаются как 3 и 5) выводят РАЗНЫЙ результат. Как такое может вообще быть?

Добавлено через 4 минуты
Результат отличается последним символом. Передано "Hello, world!", 3 строчка — "Hello, world!", 5 строчка — "Hello world", на конце символ под номером 0011.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2014, 03:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Const аргумент изменяется (C++):

Написал программку с рекурсией. Не могу понять, почему не изменяется аргумент. - C++
Еще раз здравствуйте. Днем будучи в очереди которая затянулась на 2 часа, решил побаловаться с кодом. Написал программку(если ее так можно...

Хочу разобраться с прототипами функций, const но переменная изменяется - C++
Оригиналы хэш функций тут - назовем это ENG статьёй Я так подозреваю написано это на С, но вполне без изменений запустится на С++ ...

Изменяется ли адрес или значение переменной при объявлении ее как const? - C++
При объявлении const у нас значение переменной или адрес переменной не изменяется?

Аргумент Х изменяется от начального значения 6 до конечного значения 8 с шагом 2, вектор А состоит из 6 элементов - C++
Аргумент Х изменяется от начального значения 6 до конечного значения 8 с шагом 2, вектор А состоит из 6 элементов ...

Аргумент типа WCHAR* не совместим с параметром типа const char* - C++
Как исправить косяк? VS12 ругаетсЯ #include &lt;windows.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include...

int const * const foo(const int* param) const - разъясните значение квалификаторов - C++
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...

13
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.01.2014, 03:46 #2
Покажите использование конструктора. Что вы там ему передаете?
0
palva
2681 / 1908 / 287
Регистрация: 08.06.2007
Сообщений: 7,028
Записей в блоге: 4
08.01.2014, 03:51 #3
А почему этого не может быть? Или задача написать полную программу, где это происходит?
0
ComputerMouse
6 / 6 / 3
Регистрация: 06.11.2012
Сообщений: 254
08.01.2014, 04:30  [ТС] #4
Цитата Сообщение от lemegeton Посмотреть сообщение
Покажите использование конструктора. Что вы там ему передаете?
const char *b, написано же.
Цитата Сообщение от palva Посмотреть сообщение
А почему этого не может быть? Или задача написать полную программу, где это происходит?
Ну... Потому что const и существует, вроде, для того чтобы даже технически было невозможно изменить, а тут он меняется, да еще и от действия, которое вообще к нему не относится. Вы неправильно поняли последовательность действий. Я уже написал эту программу, пытаюсь избавится от эффекта.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 05:03 #5
Цитата Сообщение от ComputerMouse Посмотреть сообщение
const char *b, написано же.
Что написано - видно. Покажите, что и как в коде передаёте.
0
ComputerMouse
6 / 6 / 3
Регистрация: 06.11.2012
Сообщений: 254
08.01.2014, 05:07  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Что написано - видно. Покажите, что и как в коде передаёте.
C++
1
str result(buffer);
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 05:12 #7
buffer как и где инициализируется?
0
ComputerMouse
6 / 6 / 3
Регистрация: 06.11.2012
Сообщений: 254
08.01.2014, 05:25  [ТС] #8
Цитата Сообщение от alsav22 Посмотреть сообщение
buffer как и где инициализируется?
C++
1
2
3
4
char *buffer;
buffer = new char;
strcpy(buffer, pbase);
strcat(buffer, (char*)b);
В operator+ того же класса.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 05:36 #9
Цитата Сообщение от ComputerMouse Посмотреть сообщение
buffer = new char;
Под один символ память выделяете?

Добавлено через 5 минут
C++
1
2
3
char *buffer;
buffer = new char[srlen(pbase) + 1];
strcpy(buffer, pbase);
Это если в buffer ничего больше не добавлять. b - это что?
1
ComputerMouse
6 / 6 / 3
Регистрация: 06.11.2012
Сообщений: 254
08.01.2014, 06:38  [ТС] #10
Цитата Сообщение от alsav22 Посмотреть сообщение
Под один символ память выделяете?

Добавлено через 5 минут
C++
1
2
3
char *buffer;
buffer = new char[srlen(pbase) + 1];
strcpy(buffer, pbase);
Это если в buffer ничего больше не добавлять. b - это что?
b — это другой объект класса str. Преобразование в char возвращает pbase.

Добавлено через 2 минуты
Проблема была действительно в этом. Интересно, как оно вообще работало.
/thread
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 06:44 #11
Значит нужно добавить память под (char*)b:
C++
1
2
3
4
char *buffer;
buffer = new char[srlen(pbase) + strlen((char*)b) + 1];
strcpy(buffer, pbase);
strcat(buffer, (char*)b);
0
ComputerMouse
6 / 6 / 3
Регистрация: 06.11.2012
Сообщений: 254
08.01.2014, 06:48  [ТС] #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Значит нужно добавить память под (char*)b:
C++
1
2
3
4
char *buffer;
buffer = new char[srlen(pbase) + strlen((char*)b) + 1];
strcpy(buffer, pbase);
strcat(buffer, (char*)b);
Я уже сделал это, написал же. /thread
0
alsav22
08.01.2014, 06:51
  #13

Не по теме:

Цитата Сообщение от ComputerMouse Посмотреть сообщение
Я уже сделал это, написал же. /thread
Не понял, что написали? Что уже сделали?

0
ComputerMouse
6 / 6 / 3
Регистрация: 06.11.2012
Сообщений: 254
08.01.2014, 06:52  [ТС] #14
Цитата Сообщение от alsav22 Посмотреть сообщение

Не по теме:


Не понял, что написали?

Не по теме:

То что я уже сделал это, и проблема решена.

0
08.01.2014, 06:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2014, 06:52
Привет! Вот еще темы с ответами:

Аргумент типа "HDC" несовместим с параметром типа const PAINTSTRUCT - C++
#include &lt;Windows.h&gt; int main(void) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &amp;ps); HPEN p1, p2, p3, p4, p0; p1 =...

Аргумент типа char** не совместим с параметром типа const char* - C++
Программа должна позволять заносить в структуру данные и выводить на экран информацию о поездах, следующих до определенной станции: ...

Аргумент типа "const char*" несовместим с параметром типа "LPCWSTR" - C++
хочу запустить paint с visual studio но выдает ошибку под словами open, filename, строка 6#include &lt;iostream&gt; #include &lt;windows.h&gt; ...

"Аргумент типа char несовместим с параметром типа const char" - C++
Программа должна перевести все символы до * в число,но что то пошло не так. P.S прошу не ругать. #include &lt;stdio.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.