|
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 16
|
||||||
Ячейка заполненной строки не перезаписывается27.02.2013, 14:48. Показов 1368. Ответов 9
Метки нет (Все метки)
Есть массив со строкой. Одну из его ячеек необходимо перезаписать, но этого не получается. Используемое ПО - Visual Studio 2008 (версию по-новее просто не потянет комп ( ).
Код (я его предельно упростила):
0
|
||||||
| 27.02.2013, 14:48 | |
|
Ответы с готовыми решениями:
9
Не перезаписывается ячейка в массиве В поле записи строки каждый текущий введенный элемент перезаписывается в предыдущий Очистка последней заполненной строки в диапазоне таблицы |
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
| 27.02.2013, 14:51 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 16
|
|
| 27.02.2013, 15:08 [ТС] | |
|
Возможно, но это упрощённый код и когда я пробовала присвоить ячейке значение другого массива, было то же самое. при проверке ошибок нет, но программа выдаёт ошибку на этапе выполнения.
0
|
|
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
|
|
| 27.02.2013, 16:01 | |
|
1
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||||||
| 27.02.2013, 18:13 | ||||||
|
Но вообще-то по этой выжимке можно понять только одно. Если в 5-ти строчках сделано столько ошибок, то что же творится в полном коде! Даже линейно апроксимировать страшно!
![]() Добавлено через 5 минут ЗЫ. Любопытно посмотреть, что произойдет, когда ТС сделает
0
|
||||||
|
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 16
|
|
| 01.03.2013, 13:44 [ТС] | |
|
easybudda, надо не в в массив ar поместить "0123456789", а в уже записанной в ar строке перезаписать всего несколько ячеек. И вот, если массив пустой, то делается это без проблем, а заполненный строкой массив не перезаписывается...
Байт, да нет, всё нормально, это на среднего размера программу ЕДИНСТВЕННАЯ ошибка, просто для удобства я эту программу обрезала. Считаю, что видеть всё необходимое сразу гораздо удобнее, чем искать полчаса. Или вы со мной не согласны)? Вообще-то программы пытаюсь писать чисто и без ошибок.
0
|
|
|
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
||||||
| 01.03.2013, 13:55 | ||||||
|
Jeironica, ar после следующей строки:
ar="0123456789"; более не указывает на выделенный массив. А указывает на новую строку символов. Обращение по индексу к строкам с использованием указателя на них - запрещено.
0
|
||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||||||||||
| 01.03.2013, 14:37 | |||||||||||
Сообщение было отмечено как решение
Решение
Jeironica, Давно хотел тут написать, но лапы как-то не доходили.
В том, что вы выделили проблемный код из большой программы - это совершенно правильный подход. Грамотный и гуманный. Теперь надо чтобы выделенная часть вела себя так же плохо, как и большая программа. Если это не так, то проблема в другом месте. Надеюсь, что вы проверили плохое поведение этого куска. Теперь надо этот кусок буквально, т.е скопировав (а не переписав) прислать на форум. Место с x=='*'; меня смутило, в том смысле, что вы именно переписали, тем самым к уже существовавшим ошибкам добавили ошибки переписывания. Ладно, это все методика, а теперь по существу вашего кода. Есть указатель ar. Вы говорите ar = new char[12]. Что происходит. В куче выделяется кусок памяти на 12 байт и в ar помещается ссылка на этот кусок (адрес этого куска). Далее ar = "123456789"; Что теперь. В ar помещается адрес статической памяти, где находится строка "123456789". Результат предыдущей операции (ar = new...) затирается, в куче появляется мусор (память выделенная оператором new) которая уже совершенно недостижима, т.к. нету на нее указателя, и не сможет быть никогда освобождена. В вашем коде строчку ar = new... можно совершенно спокойно выбросить, только лучше станет. Значит так. После ar = "12..."; он указывает на статическую памятью. И ar[4] = x; должен записывать в эту статическую память. И вот тут разные компиляторы ведут себя по-разному. Некоторые (старинные) позволяют в нее писать. Другие (более продвинутые) - запрещают. Что, если подумать - логично. Чтоб вас не запутать (видите, для объяснения 3-х строчек простого кода пришлось целое эссе генерить ) даю правильный вариант
Добавлено через 1 минуту ITcrusader, опередили. ![]() Но думаю и мое не повредит... ![]() Добавлено через 14 минут Хочу еще добавить. Очень похожие выражения
Во втором память выделяется для указателя (обычно 4 байта) и в него помещается адрес на статическую память. Хоть и говорят часто, что в Си массив и указатель это одно и тоже, но в самом деле это не совсем так.
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 16
|
|
| 09.03.2013, 17:59 [ТС] | |
|
Угу, всё ясно, порграмма, наконец-то, работает. Ребята, спасибо всем
Особенно Байту, т.к. по-началу, до меня не дошло, что для того, чтобы перезаписать один символ строки, надо воспользоваться strcpy и без этого объяснения и не дошло бы. Прошу прощения, что долго не отвечала, я не забила, просто пишу не из дому, и отсюда можно писать только в определённое время, а я его просыпаю >_> Спасибо!
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 09.03.2013, 18:58 | ||
С запозданием - Поздравляю...
1
|
||
| 09.03.2013, 18:58 | |
|
Помогаю со студенческими работами здесь
10
Обновление строки если ячейка уже существует Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|