Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 16

Ячейка заполненной строки не перезаписывается

27.02.2013, 14:48. Показов 1368. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть массив со строкой. Одну из его ячеек необходимо перезаписать, но этого не получается. Используемое ПО - Visual Studio 2008 (версию по-новее просто не потянет комп ( ).

Код (я его предельно упростила):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <stdio.h>
using namespace std;
 
void main()
{
    char *ar=new char[12];
    ar="0123456789";
 
char x;
x=='*';
ar[4]=x;
}
Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2013, 14:48
Ответы с готовыми решениями:

Не перезаписывается ячейка в массиве
вот мой код: foreach ($arr as $k =&gt; $v) { echo $k .&quot; &quot;. $v .&quot; &quot;. $v .&quot; &quot;. $v . &quot; &quot;.&quot; &quot;. $v ....

В поле записи строки каждый текущий введенный элемент перезаписывается в предыдущий
Структуры и строки. Возникла проблема с вводом строк. В поле записи строки каждый текущий введенный элемент перезаписывается в предыдущий....

Очистка последней заполненной строки в диапазоне таблицы
Очистка последней заполненной строки в диапазоне таблицы. Подскажите пожалуйста макрос для данного действия, пробовал...

9
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
27.02.2013, 14:51
Цитата Сообщение от Jeironica Посмотреть сообщение
x=='*';
== - это сравнение. Наверное, вы имели в виду x = '*';
0
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 16
27.02.2013, 15:08  [ТС]
Возможно, но это упрощённый код и когда я пробовала присвоить ячейке значение другого массива, было то же самое. при проверке ошибок нет, но программа выдаёт ошибку на этапе выполнения.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
27.02.2013, 16:01
Цитата Сообщение от Jeironica Посмотреть сообщение
ar="0123456789";
C++
1
strcpy(ar, "0123456789");
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
27.02.2013, 18:13
Но вообще-то по этой выжимке можно понять только одно. Если в 5-ти строчках сделано столько ошибок, то что же творится в полном коде! Даже линейно апроксимировать страшно!

Добавлено через 5 минут
ЗЫ. Любопытно посмотреть, что произойдет, когда ТС сделает
C++
1
delete ar;
0
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 16
01.03.2013, 13:44  [ТС]
easybudda, надо не в в массив ar поместить "0123456789", а в уже записанной в ar строке перезаписать всего несколько ячеек. И вот, если массив пустой, то делается это без проблем, а заполненный строкой массив не перезаписывается...

Байт, да нет, всё нормально, это на среднего размера программу ЕДИНСТВЕННАЯ ошибка, просто для удобства я эту программу обрезала. Считаю, что видеть всё необходимое сразу гораздо удобнее, чем искать полчаса. Или вы со мной не согласны)? Вообще-то программы пытаюсь писать чисто и без ошибок.
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
01.03.2013, 13:55
Jeironica, ar после следующей строки:
ar="0123456789";
более не указывает на выделенный массив. А указывает на новую строку символов.
Обращение по индексу к строкам с использованием указателя на них - запрещено.

C++
1
2
3
char ar[] = "0123456789"; 
    ar[4]='*';
    cout << ar[4];
Вот - приемлемый вариант
0
Диссидент
Эксперт C
 Аватар для Байт
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-х строчек простого кода пришлось целое эссе генерить ) даю правильный вариант
C++
1
2
3
4
 char *ar = new char[12];
strcpy(ar, "0123456789"); // как учил [b]easybudda[/b]
char x = '*';
ar[4] = x;
Удачи!

Добавлено через 1 минуту
ITcrusader, опередили.
Но думаю и мое не повредит...

Добавлено через 14 минут
Хочу еще добавить. Очень похожие выражения
C
1
2
 char ar[] = "012345";
char *ar = "012345";
делают совершенно разные вещи. В первом случае в стеке выделяется 7 байтов и туда помещается строка (наподобие strcat).
Во втором память выделяется для указателя (обычно 4 байта) и в него помещается адрес на статическую память.
Хоть и говорят часто, что в Си массив и указатель это одно и тоже, но в самом деле это не совсем так.
0
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 16
09.03.2013, 17:59  [ТС]
Угу, всё ясно, порграмма, наконец-то, работает. Ребята, спасибо всем Особенно Байту, т.к. по-началу, до меня не дошло, что для того, чтобы перезаписать один символ строки, надо воспользоваться strcpy и без этого объяснения и не дошло бы. Прошу прощения, что долго не отвечала, я не забила, просто пишу не из дому, и отсюда можно писать только в определённое время, а я его просыпаю >_> Спасибо!
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
09.03.2013, 18:58
Цитата Сообщение от Jeironica Посмотреть сообщение
я его просыпаю
Сон программистки - священен! Не будите ее. Вам же хуже будет! С запозданием - Поздравляю...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2013, 18:58
Помогаю со студенческими работами здесь

Поиск последней заполненной строки в умной таблице
Добрый день! Ищу последние заполненные строки в двух умных таблицах одинаковым способом, но в одном случае возвращается номер последней...

Номер строки последней заполненной ячейки в заданном диапазоне
Всем доброго времени суток. Помогите наладить код по определению номера строки последней заполненной ячейки в заданном диапазоне. При...

Поиск и перенос последней заполненной строки из одной книги в другую
Здравствуйте. Помогите разобраться пожалуйста. Есть 2 книги &quot;Ввод данных1&quot; и &quot;Распечатать&quot;. В книгу &quot;Ввод данных1&quot; мы...

Протягивание формата таблицы до уровня последней заполненной строки конкретного столбца
Доброго вечера, специалисты по VBA. На листе находится таблица E3:H5 Однако по столбцу F - текст выходит за пределы таблицы,...

Обновление строки если ячейка уже существует
Недавно доделал скрипт для сервера cs 1.6, суть его в том, что при запуске сервера или смены карты, он отправляет в базу данных: Ip...


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

Или воспользуйтесь поиском по форуму:
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 Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru