64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
|
||||||
1 | ||||||
Работа с массивом char08.07.2010, 21:54. Показов 7779. Ответов 32
Метки нет (Все метки)
Добрый день.
Объясните, если не сложно, на пальцах в чем ошибка?
0
|
08.07.2010, 21:54 | |
Ответы с готовыми решениями:
32
Работа с массивом char Работа с массивом char Работа с массивом символов Char работа с массивом символов типа Char |
Унылый школьник
126 / 60 / 10
Регистрация: 06.11.2009
Сообщений: 353
|
|
09.07.2010, 00:35 | 21 |
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
09.07.2010, 01:00 | 22 | |||||
Вместо выделения памяти и прочего, не легче сделать:
0
|
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
|
|
09.07.2010, 01:22 [ТС] | 23 |
CyBOSSeR, хотелось понять в чем ошибка в конкретном примере, а не получить готовое решение.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
09.07.2010, 03:54 | 24 | |||||
в строковой константе ничего нельзя изменить до конца программы две одинаковые строковые константы в разных местах программы, могут ссылаться на одну строку в памяти
0
|
34 / 34 / 8
Регистрация: 07.06.2010
Сообщений: 118
|
|
09.07.2010, 09:29 | 25 |
st_dent, Массив my1 у вас является одномерным так как в обьявлении только одна пара скобок [], если хотите обьявить массив двумерный то надо ставить две пары скобок my1[][].
По поводу обращения, то получается что первый оператор индексирования []вытаскивает из массива my1 строку, а второй уже применяется к строке что бы вытащить символ Добавлено через 11 минут Demihalf, обьясните почему происходит ACCESS VIOLATION Добавлено через 11 минут как я понимаю это из за того что там строковые константы а если выделять память динамически то они таковыми являтся не будут так?
0
|
Унылый школьник
126 / 60 / 10
Регистрация: 06.11.2009
Сообщений: 353
|
||||||
09.07.2010, 09:31 | 26 | |||||
[Freeman],указатель на указатель тоже вполне можно рассматривать, как двумерный массив. А массив как указатель. Я уже об этом писал. И обычно нормальные авторы пособий по Си/Си++ об этом говорят. (Пример: Джесс Либерти, Брэдли Джонс "Освой самостоятельно C++ за 21 день", пятое издание, страница 372 и вообще вся 13 глава)
И в том же сообщении я оставил ссылку на Википедию про ошибку сегментации (Access violation). Проблема та же, что в этом примере:
Вот еще раз ссылка, там написано подробнее: http://ru.wikipedia.org/wiki/%... 0%B8%D0%B8
1
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
09.07.2010, 09:52 | 27 |
В твоем примере массив my1 содержит два указателя на строковые литералы, которые были помещены в область памяти только для чтения. Как правильно сказал accept:
Отсюда и исключение, выбрасываемое при попытке записи в память только для чтения в строке: В примере, приведеном мною в посте #22 массив arr содержит два массива символов, которые в отличии от строковых литералов, помещаются в память доступную для записи, что позволяет осуществлять изменение их содержания.
1
|
34 / 34 / 8
Регистрация: 07.06.2010
Сообщений: 118
|
|
09.07.2010, 14:42 | 28 |
Demihalf, в e-библиотеке эта книга у меня есть прочитал...
последний вопрос то есть когда используется strcpy а не оператор присвоения, то строки не будут только для чтения(константными) тогда для чего еще выделять память динамически?
0
|
Унылый школьник
126 / 60 / 10
Регистрация: 06.11.2009
Сообщений: 353
|
||||||||||||||||||||||||||
09.07.2010, 15:28 | 29 | |||||||||||||||||||||||||
[Freeman], когда используется strcpy, она копирует все символы из source по необходимому адресу (destination). Если мы поступим так:
И вообще, присваивать строковой литерал указателю напрямую нельзя, кроме случая инициализации константы:
2
|
34 / 34 / 8
Регистрация: 07.06.2010
Сообщений: 118
|
|
09.07.2010, 16:27 | 30 |
Все я понял, я по началу хотел спросить а что если инициализировать указатель 0, но если подумать то это просто будет нулевой указатель который не указывает на область памяти в которую можно что то записать по этому нужно выделять память динамически или в стеке путем обьявления массива
Примеры мог не приводить уж как выделять память знаю
0
|
232 / 102 / 6
Регистрация: 18.04.2010
Сообщений: 294
|
|
15.07.2010, 21:31 | 31 |
0
|
[Freeman]
|
15.07.2010, 21:43
#32
|
Не по теме: 6a6ka, А можно об этом по подробнее?
0
|
232 / 102 / 6
Регистрация: 18.04.2010
Сообщений: 294
|
|
15.07.2010, 21:51 | 33 |
На сервер отправлялся игрок(пакет), видимо, с каким-то значением выше заданного в параметре функции и сервер опадал в осадок. И весь фикс этой дырки заключался в изменении функции strcpy на strncpy.
Поэтому лучше заранее подстраховаться.
0
|
15.07.2010, 21:51 | |
15.07.2010, 21:51 | |
Помогаю со студенческими работами здесь
33
Битовые операции: работа с целым числом (long) как с "массивом" из четырех однобайтовых чисел (char) Проблема с классом и массивом char-ов проблема с массивом типа CHAR Проблема с символьным массивом char Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |