В описаниях более-менее новых компиляторов часто особо подчёркивается возможность работы с длинными строчками, >255. Я как-то с этим ещё не сталкивался, и любопытно: это действительно так важно?
То есть: когда возникает конкретная необходимость их использования (пример)? И есть ли такие задачи, в которых эту проблему нельзя как-нибудь хитро обойти, быстро написав собственную процедурку?
Если я правильно понял - то имеются в виду - Ascii-Z строки которые имеют признак конца строки - нулевой байт. Мне кажется их использование как минимум экономит память - в реализации Паскаль например - обычный String занимает всегда 256 байт - а PString - размещается в динамической памяти под кот. выделяется минимум сколько нужно.
С другой стороны лично мне помогало использовать длинные строки если например требуется создать длинные списки неизвестной заранее длинны - если в ASCIIZ строке размещать элементы и разделять их заранее оговоренным признаком - то можно создать список какой угодно длинны - пока хватит динамической памяти. Это полезно хотя бы при создании списка файлов - кот. в современных папках может быть и 1000 и 2000 а вообще я встречал 12000 мелких файлов - вот и попробуй создать массив такой размерности! И не говоря уже про различные редакторы документов (проблема > 64Кб) - а где сейчас взять такие мальнькие файлы если их размеры измеряются в Мегаб.
В Win32Api - длинные строки повсюду - хотя работать с ними удовольствие сомнительное - они всегда могут быть причиной неочивидной ошибки! Так что наверное везде где можно без них - лучше так и делать!
Можно по-подробнеее про
BlackShadow
11-3=8 ,может поэтому?
Ты не забыл про завершающий 0 в ASCII-Z?
В Дельфи, например, длинные строки реализованы как в старом Паскале -- только под счетчик длины отведено 4 байта.
А насчет фиксированного размера и расхода памяти... не уверен. Возьмем тот же Дельфи. Длина строки ограничена 2 Гб. Но это же не значит, что под нее выделится два гига =) Выделится ровно столько, сколько нужно. Хотя если ты имел ввиду жесткий диск, то оно так.
Зато заранее известная длина строки -- очень удобно (когда ее нужно знать, разумеется). А так только чтобы посчитать длину строки нужно время.
trminator, произошда типичная подмена понятий: ты не путай тёплое с мягким Pascal это не Delphi. Хоть и похожи
Нет, я проверил. Т.е согласен с BlackShadow. При стринге в 256 бат все они резервируются!
Oleg_Z, код в студию! Не верю, что под string в ОП резервируются 256 байт. Хотя допускаю, что sizeof(s) будет выдавать 256... xz
BlackShadow, да, погорячился, пожалуй... в Паскале альтернтивы ASCIIZ хотя бы в плане длины нет
Значит так.
Не факт. Скорее всего при компиляции паскаль выравнивает область данных по какой-то границе (например 4К)., а в режиме DEBUG естественно забивает её нулями. Но ты прав - длина фиксирована.
Хм, я об этом не подумал. Но почему тогда во всех книгах пишется, что под стринг выделяется 256 байт? Ложь?
Oleg_Z, ты меня добить хочешь.
Во-первых НЕ ЛОЖЬ, а ИСТИНА. Я же тебе говорю, что длина действительно фиксирована!
Во-вторых. Как измерить объём памяти отведённый под НЕЧТО? Ставим какую-нибудь метку перед НЕЧТО и сразу после НЕЧТО. Затем берём разность адресов второй и первой метки и получаем этот самый размер. В случае с переменными меткой 1 является она сама, а меткой 2 может послужить переменная, объявленная непосредственно за ней. Что может быть банальней?
Ну, да, да, все верно. Добивать не буду :D