![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| olegarh |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 6.2.2010 Репутация: нет Всего: нет |
Всем привет..
есть функция на вход которой подается дата (число месяц) одна и та же дата может подаваться несколько раз например 03.05, след раз 03.05, а потом например 04.05. нужно зафиксировать изменение даты и если она изменилась то выполнить некоторые действия делаю так
В итоге получается что программа один раз заходит в цикл1 потом крутиться в цикле3 даже если дата меняется. в чем дело не пойму. Это сообщение отредактировал(а) olegarh - 7.9.2011, 13:00 |
|||
|
||||
| rodnover |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: нет Всего: 10 |
Как минимум:
1. за срок жизни переменной data вы не отвечаете, поэтому она может уничтожиться в любой момент, после возврата из данной функции и data1 будет указывать на мусор; 2. для решения этой проблемы нужно использовать копирование строк. Хотя бы функцию strcpy и выделять память под data
3.
Это сообщение отредактировал(а) rodnover - 7.9.2011, 13:09 |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| olegarh |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 6.2.2010 Репутация: нет Всего: нет |
rodnover, Это не меняет того что первые принты показывают что data = data1 хотя присваиваний там нет это как то объяснить можете? boostcoder, ии?? что не так? Это сообщение отредактировал(а) olegarh - 7.9.2011, 13:15 |
|||
|
||||
| rodnover |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: нет Всего: 10 |
Потому что вам везет и адрес куда указывает data не меняется, вы просто меняете текст расположенный по адресу указываемому data.
Для быстрого примера попробуйте:
извиняюсь за возможные опечатки - копипаста. Это сообщение отредактировал(а) rodnover - 7.9.2011, 13:24 |
|||
|
||||
| olegarh |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 6.2.2010 Репутация: нет Всего: нет |
Попробывал, получилось что data1 на протяжении всей программы не изменилось и осталось равно начальному значению
Еще варианты есть? |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
olegarh, стоит попробовать std::string...
-------------------- вопросов больше чем ответов |
|||
|
||||
| rodnover |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: нет Всего: 10 |
Код избавляющий от ошибки выполнения двух блоков примерно такой:
P.S. в коде выше на пару сообщений, я, оказывается, лишнюю фигурную скобочку поставил. извиняюсь. P.P.S. Если С++, то соглашусь, что лучше использовать стандартные стринги. Это сообщение отредактировал(а) rodnover - 8.9.2011, 08:34 |
||||
|
|||||
| olegarh |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 6.2.2010 Репутация: нет Всего: нет |
так у тебя в коде char а у меня char* с которым не работает
|
|||
|
||||
| olegarh |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 6.2.2010 Репутация: нет Всего: нет |
||||
|
||||
| rodnover |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: нет Всего: 10 |
В этом у тебя и ошибка размер char * = 4 байта (для 32 битной системы). Содержит АДРЕС в памяти на строку. Он не копирует строку, он сохраняет в data1 адрес строки data. Когда ты меняешь строку в data - адрес не меняется, а значит data1 указывает на текст, который ты уже изменил. Вот и всё. Со string, конечно, работает (и это лучший вариант), потому что он сохраняет не адрес, а последовательность символов. Совет: Разбирайтесь в С++ и указателях. Это сообщение отредактировал(а) rodnover - 8.9.2011, 19:10 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |