| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Где ошибка? |
| Автор: olegarh 7.9.2011, 12:59 | ||
| Всем привет.. есть функция на вход которой подается дата (число месяц) одна и та же дата может подаваться несколько раз например 03.05, след раз 03.05, а потом например 04.05. нужно зафиксировать изменение даты и если она изменилась то выполнить некоторые действия делаю так
В итоге получается что программа один раз заходит в цикл1 потом крутиться в цикле3 даже если дата меняется. в чем дело не пойму. |
| Автор: rodnover 7.9.2011, 13:08 | ||||
| Как минимум: 1. за срок жизни переменной data вы не отвечаете, поэтому она может уничтожиться в любой момент, после возврата из данной функции и data1 будет указывать на мусор; 2. для решения этой проблемы нужно использовать копирование строк. Хотя бы функцию strcpy и выделять память под data
3.
|
| Автор: boostcoder 7.9.2011, 13:08 |
ну так это же статики. |
| Автор: olegarh 7.9.2011, 13:14 |
rodnover, Это не меняет того что первые принты показывают что data = data1 хотя присваиваний там нет это как то объяснить можете? boostcoder, ии?? что не так? |
| Автор: rodnover 7.9.2011, 13:18 | ||
| Потому что вам везет и адрес куда указывает data не меняется, вы просто меняете текст расположенный по адресу указываемому data. Для быстрого примера попробуйте:
извиняюсь за возможные опечатки - копипаста. |
| Автор: olegarh 7.9.2011, 20:59 |
| Попробывал, получилось что data1 на протяжении всей программы не изменилось и осталось равно начальному значению Еще варианты есть? |
| Автор: Леопольд 8.9.2011, 07:37 |
| olegarh, стоит попробовать http://cplusplus.com/reference/string/string/... |
| Автор: rodnover 8.9.2011, 08:19 | ||||
Код избавляющий от ошибки выполнения двух блоков примерно такой:
P.S. в коде выше на пару сообщений, я, оказывается, лишнюю фигурную скобочку поставил. извиняюсь. P.P.S. Если С++, то соглашусь, что лучше использовать стандартные стринги. |
| Автор: olegarh 8.9.2011, 14:00 |
| так у тебя в коде char а у меня char* с которым не работает |
| Автор: olegarh 8.9.2011, 15:09 |
Сделал так) все работает короче) всем спасибо |
| Автор: rodnover 8.9.2011, 19:09 |
В этом у тебя и ошибка размер char * = 4 байта (для 32 битной системы). Содержит АДРЕС в памяти на строку. Он не копирует строку, он сохраняет в data1 адрес строки data. Когда ты меняешь строку в data - адрес не меняется, а значит data1 указывает на текст, который ты уже изменил. Вот и всё. Со string, конечно, работает (и это лучший вариант), потому что он сохраняет не адрес, а последовательность символов. Совет: Разбирайтесь в С++ и указателях. |