![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тип AniString
Германн © (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));{выход из ОВ}- грабли, т.к. String(passtr) - уже отпущен...
...
hf:= CreateFile(pch, ...);
Вылавливать такие грабли потом очень трудно, т.к. виртуальная память может все еще удерживаться менеджером памяти, а содержимое может все еще не быть испорченным другими операциями с памятью...
Ключевое слово здесь - может(как звезды расположатся)...
При этом:
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 учитывает, доказали примерами.