![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Длина строковой переменной [D7, XP]
fend © (2007-09-28 08:48:00)Как определить длину переменной string?
Anatoly Podgoretsky (2007-09-28 19:14:00) [1]> Германн (28.09.2007 17:15:52) [52]
Не страшно, но не нужно и это не про канделябр.
Anatoly Podgoretsky (2007-09-28 19:14:00) [2]> Инс (28.09.2007 17:02:51) [51]
Это они уже виноваты, неправильно используют string, но это к PChar отношения не имеет.
Написать неправильно можно и для Integer - например MaxInt + 1 и отключение рантайм проверки
или for byte := 1 to 255 и удивляться некоторым эффектам.
Германн (2007-09-28 17:15:00) [3]
> особенно часто видишь советы передавать String-и между DLL
> и приложением под видом PChar
А за такие советы надо канделябром по морде.
Инс (2007-09-28 17:02:00) [4]
> Anatoly Podgoretsky © (28.09.07 16:47) [50]
Из-за того, что многие думают, что PChar и String полностью совместимы, очень часто возникают ошибки, особенно часто видишь советы передавать String-и между DLL и приложением под видом PChar, при этом не упоминая ряд ограничений.
Anatoly Podgoretsky (2007-09-28 16:47:00) [5]> Инс (28.09.2007 16:19:46) [46]
Особый конечно, из-за требований по работе со строками.
Но для работы с WinApi он полностью совместимый.
Инс (2007-09-28 16:36:00) [6]
> Т.е. тип String это тот же самый PChar только со служебной
> частью в начале...
Это финализируемый тип, со всеми вытекающими. Вот две хорошие статьи:
http://www.rsdn.ru/article/Delphi/dynarrays.xml
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1206
Германн (2007-09-28 16:36:00) [7]
> Т.е. тип String это тот же самый PChar только со служебной частью в начале...
>
Ну если вспомнить про фаберже, то да. Но в "служебной части" то и все самое важное :-)
{RASkov} (2007-09-28 16:32:00) [8]var S: AnsiString;
-8|-4| 0 | 1 | 2 | 3 | 4 |
вот строка (S) - 'ABCDE'
(992)-8 - кол-во ссылок - 1
(996)-4 - длина строки - 5
(1000)0 - A (#65)
(1001)1 - B (#66)
(1002)2 - C (#67)
(1003)3 - D (#68)
(1004)4 - E (#69)
(1005)5 - #0
Так что ли получается?
Т.е. тип String это тот же самый PChar только со служебной частью в начале...
Инс (2007-09-28 16:19:00) [9]
> Естественно, но к PChar это не относится, это изобретение
> Борланда, указатель на символ
PChar это не просто ^Char. Это тоже особый для компилятора тип.
Инс (2007-09-28 16:17:00) [10]
> Полная
Не сказал бы. String физически соответствует PChar-у, но не наоборот. Но это не значит, что String можно всегда приводить к PChar и это будет безопасно. На уровне PChar компилятор забывает, что это особый финализируемый тип. Так что совместимость тут вообще постольку поскольку, только на определенном уровне.
Anatoly Podgoretsky (2007-09-28 16:12:00) [11]> DVM (28.09.2007 16:07:41) [41]
Естественно, но к PChar это не относится, это изобретение Борланда, указатель на символ, а функции предполагаю, что за этим символом есть еще и один из них признак окончания строки. Сама аббревиатура означает (расшифровка) - ASCII (ansi) Zero
evvcom (2007-09-28 16:12:00) [12]
> Германн © (28.09.07 15:12) [34]
>
>
> > evvcom © (28.09.07 13:56) [24]
> >
> > Опять понеслось :)
> >
>
> Во-во. Розыча на них нет :-)
у него дела и поважнее есть. Наверное, уже Пашку пропивает :)
Anatoly Podgoretsky (2007-09-28 16:10:00) [13]> Инс (28.09.2007 16:05:40) [40]
Полная
DVM (2007-09-28 16:07:00) [14]
> А функции работают не с PChar, а с ASCIIZ
О каких функциях ведете речь?
Я в том смысле, что функциям надо знать где строка оканчивается.
Инс (2007-09-28 16:05:00) [15]
> Нет, не пофиг, это сделано специально для совместимости
> с типом PChar.
Правда важно понимать, что совместимость эта в общем то односторонняя.
Anatoly Podgoretsky (2007-09-28 16:02:00) [16]> DVM (28.09.2007 15:57:37) [37]
А функции работают не с PChar, а с ASCIIZ
Anatoly Podgoretsky (2007-09-28 16:02:00) [17]> {RASkov} (28.09.2007 15:50:35) [35]
Зря думал, вредно.
DVM (2007-09-28 15:57:00) [18]Да оно и PChar - у пофиг, не пофиг функциям работающим с такими строками.
Инс (2007-09-28 15:53:00) [19]
> А я почему-то думал, что пофик какой там символ в конце
> строки....
Нет, не пофиг, это сделано специально для совместимости с типом PChar.
{RASkov} (2007-09-28 15:50:00) [20]> [31] Инс © (28.09.07 14:27)
> Переменная типа AnsiString
> Строка завершается нулевым символом.
А я почему-то думал, что пофик какой там символ в конце строки....