Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тип AniString


Страницы:   1 2 3

Германн ©   (2011-05-13 02:30:00) 

Напомните мне пожалуйста какой смысл имеет (если имеет) для данного типа символ #0. Конкретно, функция Length его учитывает или нет?


Германн   (2011-05-13 21:11:00) [21]


> Подложи соломки заранее.

Спасибо, подложу.


Ega23   (2011-05-13 21:00:00) [22]


> Не будет никаких Realloc. Будет array[0.1023] of char

Тогда уж of AnsiChar. Подложи соломки заранее.


Германн   (2011-05-13 20:35:00) [23]


> работай как с массивом, кто мешает? индексация только с
> 1, и вся разница.

У строк куча готовых функций типа Copy, Pos etc. Простое сложение двух строк опять же.


sniknik   (2011-05-13 20:19:00) [24]

>  Тем, что хотя это и буфер, но нужно работать с ним как со строкой.
работай как с массивом, кто мешает? индексация только с 1, и вся разница.


Германн   (2011-05-13 20:19:00) [25]


> Eraser ©   (13.05.11 20:12) [21]
>
> > [14] Германн ©   (13.05.11 16:46)
>
> используйте TBytes.

Т.е. "тонкий" намек на то, чтобы я ушел с Д2007?
:)


Eraser   (2011-05-13 20:12:00) [26]

> [14] Германн ©   (13.05.11 16:46)

используйте TBytes.


Германн   (2011-05-13 19:06:00) [27]


> ну так сделай одинарный, на максимум. чем не устраивает?

Тем, что хотя это и буфер, но нужно работать с ним как со строкой.

> а какая разница? SetLength, Realloc

Не будет никаких Realloc. Будет array[0.1023] of char


clickmaker   (2011-05-13 18:52:00) [28]

> Многочисленные SetLength

а какая разница? SetLength, Realloc...


sniknik   (2011-05-13 18:50:00) [29]

> Многочисленные SetLength.
ну так сделай одинарный, на максимум. чем не устраивает?


Германн   (2011-05-13 17:32:00) [30]


> И чем AnsiString в данном случае не устраивает?

Многочисленные SetLength.


Anatoly Podgoretsky   (2011-05-13 17:03:00) [31]

> Германн  (13.05.2011 16:46:14)  [14]

string с предварительно установленой длиной, длину все равно надо
устанавливать, но для PChar еще и память запрашивать.


MBo   (2011-05-13 16:51:00) [32]

И чем AnsiString в данном случае не устраивает?


Германн   (2011-05-13 16:46:00) [33]


> Для какой такой особой цели

Приемный накопительный буфер.


MBo   (2011-05-13 16:31:00) [34]

>Знать ничего не остается приемлемого, кроме PChar.

Для какой такой особой цели???


Anatoly Podgoretsky   (2011-05-13 16:28:00) [35]

> Германн  (13.05.2011 15:46:11)  [11]

В большинстве случаев это провал в производительности и неудобство.


Германн   (2011-05-13 15:46:00) [36]

Да. Знать ничего не остается приемлемого, кроме PChar.


Anatoly Podgoretsky   (2011-05-13 14:15:00) [37]

Это не #0 хоть и тоже значение, это завершающий ноль, для совместимости с PChar. Это не часть строки.


MBo   (2011-05-13 10:07:00) [38]

Хмм... Я-то в [1] про финишный ноль подумал


han_malign   (2011-05-13 09:55:00) [39]

З.З.Ы. Главное не путать с ShortString(aka Pascal String):
var passtr: string[5];
...
passtr:= '123'#0'4';
PChar(passtr) = #5'123'{#0} // !!!


Если нужно привести ShortString к PChar, проще всего - PChar(String(passtr)), нонужно помнить, что создается временныйэкземпляр String, который уничтожается при выходе из области видимости.
то есть:
hf:= CreateFile(PChar(String(passtr)), ...);{выход из ОВ}- все путем
pch:= PChar(String(passtr));{выход из ОВ}
...
hf:= CreateFile(pch, ...);
- грабли, т.к. String(passtr) - уже отпущен...
Вылавливать такие грабли потом очень трудно, т.к. виртуальная память может все еще удерживаться менеджером памяти, а содержимое может все еще не быть испорченным другими операциями с памятью...
Ключевое слово здесь - может(как звезды расположатся)...


При этом:
var passtr 5: string[ 5];...
passtr5:= '12345';
try
  passtr 5[ 6] <> #0
except
on E: EAccessViolation do {а вы чего хотели?} ;
end;
passtr5:= '321';
passtr5[4] = '4'
passtr5[5] = '5'

- это на тот случай - если кто-то решит, что он самый умный( PChar(@passtr[ 1])), или действительно умный( passtr[ord(passtr[0])+1]:= #0), но забыл про вариант
sizeof(passtr[0])+(ord(passtr[0]))*sizeof(passtr[1]) = sizeof(passtr)...


Anatoly Podgoretsky   (2011-05-13 09:46:00) [40]


> Напомните мне пожалуйста какой смысл имеет (если имеет)
> для данного типа символ #0. Конкретно, функция Length его
> учитывает или нет?

Никакого. Length учитывает, доказали примерами.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо