21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
|
||||||
1 | ||||||
Какова максимальная длина строки, на которую может ссылаться указатель на массив символов?22.07.2010, 22:59. Показов 5780. Ответов 20
Метки нет Все метки)
(
У меня простой вопрос - какова максимальная длина строки, на которую может ссылаться указатель на массив символов? Как так волшебным образом получается, что не указывая длину строки мы можем запихать туда что угодно?
0
|
|
22.07.2010, 22:59 | |
Ответы с готовыми решениями:
20
Какова может быть максимальная длина строки URL?
Какова максимальная длина строки?
|
![]() ![]() |
|
22.07.2010, 23:13 | 2 |
По стандарту длина строкового литерала гарантируется только 511 символов. Всё, что длиннее - это уже как комплятор возжелает
Ну и на всякий случай почитай тут Изменить значение указателя Т.е. в качестве инициализатора (внутри фигурных скобок) у тебя на самом деле указатель (один штука)
1
|
29 / 29 / 6
Регистрация: 14.12.2009
Сообщений: 79
|
|
22.07.2010, 23:13 | 3 |
Длина строки зависит только от количества оперативной памяти вашего компьютера. А массив указателей, кстати, очень удобная вещь - не нужно явно указывать размерность строки, тем самым исключая лишний расход оперативной памяти.
0
|
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
|
||||||
23.07.2010, 00:15 [ТС] | 4 | |||||
Всем спасибо
![]() Кстати, у меня DevC++ почему-то компилируется нормально, но виснет при выполнении след. кода:
0
|
2018 / 1617 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
||||||
23.07.2010, 00:19 | 5 | |||||
![]() Решение
Ничего никуда не запихивается. Вы создаете всего лишь массив указателей(в данном случае указатель один) на строковый литерал, который существует на протяжении всей работы программы. Т.е. "Bla-bla!" это строковый литерал, а ptr[0] указатель(переменная хранящая адресс) на этот строковый литерал.
Строку "Bla-bla!" изменять нельзя, это константа. Например в следующем фрагменте кода ptr[0] и ptr2[0] ссылаются на одну и туже область памяти.
1
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
23.07.2010, 01:18 | 6 |
0
|
48 / 48 / 10
Регистрация: 12.01.2010
Сообщений: 183
|
||||||
23.07.2010, 01:33 | 7 | |||||
или так еще должно работать
0
|
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
|
|
23.07.2010, 02:20 [ТС] | 8 |
0
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
23.07.2010, 02:32 | 9 |
TrenAr, Разыменовывая указатель char* (*ptr) вы получаете первый элемент массива char. Следовательно формат %s он иметь не может никак.
1
|
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
|
||||||
23.07.2010, 03:00 [ТС] | 10 | |||||
Большое спасибо
![]() Добавлено через 24 минуты Кстати, подождите, интересно получается - если у нас есть структура, то мы можем изменять содержимое строки, на которую указывает указатель!
0
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
23.07.2010, 03:07 | 11 | |||||
1-ый адрес 0x0041564c
2-ой адрес 0x0041563c Добавлено через 3 минуты И кстати:
0
|
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
|
|
23.07.2010, 04:00 [ТС] | 12 |
0
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
23.07.2010, 04:07 | 13 | ||||||||||
![]() Решение
Хм. Нет. Действительно нельзя.
А вот так:
0
|
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
|
|
23.07.2010, 04:21 [ТС] | 14 |
Гм... а можно немножко конкретнее - пересматривать все его посты если честно не очень хочется
![]()
0
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
23.07.2010, 04:36 | 15 |
Ну хотя бы тут: Изменить значение указателя
0
|
![]() ![]() |
|
23.07.2010, 11:59 | 16 |
Проблемы по ходу дела растут из того, что является "строкой". Строка - это, условно говоря, набор байтов, заканчивающийся нулевым символом. Это некоторое виртуальное понятие. А то, что приведено по ссылке постом выше, называется "строковой литерал". Это частный случай строки, который появляется в compile-time, и который многие компиляторы реализуют таким образом, что в runtime его модифицировать нельзя. Хотя, например, в gcc есть опция -fwritable-strings, включив которую сгенерится код, разрешающий запись в строковой литерал (для совместимости со старыми программами)
0
|
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
|
||||||
23.07.2010, 12:07 [ТС] | 17 | |||||
Ну вот это переприсваивание является нормальным или этого лучше следует избегать?
0
|
34 / 34 / 8
Регистрация: 07.06.2010
Сообщений: 118
|
||||||
23.07.2010, 12:42 | 19 | |||||
0
|
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
|
|
23.07.2010, 12:45 [ТС] | 20 |
![]()
0
|
23.07.2010, 12:45 | |
Помогаю со студенческими работами здесь
20
Какова максимальная длина запроса sql? Какова максимальная длина названия функции Какова максимальная длина кабеля usb 2.0
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |