Текущий архив: 2007.10.21;
Скачать: CL | DM;
ВнизДлина строковой переменной Найти похожие ветки
← →
fend (2007-09-28 08:48) [0]Как определить длину переменной string?
← →
Savek (2007-09-28 08:55) [1]букварь потерялся?
length(str)
← →
fend (2007-09-28 08:58) [2]>Savek (28.09.07 08:55) [1]
>букварь потерялся?
Точно
← →
Инс © (2007-09-28 10:18) [3]Так, к сведению... Длина переменной string всегда равна 4 байтам. А вот длина строки, на которую переменная string ссылается - это уже length(str)
← →
Ega23 © (2007-09-28 10:41) [4]
> Инс © (28.09.07 10:18) [3]
> Длина переменной string всегда равна 4 байтам
От разрядности зависит... :)))
← →
Инс © (2007-09-28 10:43) [5]
> От разрядности зависит... :)))
Блин... И не поспоришь ;-)
← →
Anatoly Podgoretsky © (2007-09-28 11:15) [6]> Инс (28.09.2007 10:43:05) [5]
А можно еще и оспорить, зависит от состояния переключателя H+-
← →
DVM © (2007-09-28 11:39) [7]Вам бы все спорить.
← →
Anatoly Podgoretsky © (2007-09-28 11:57) [8]> DVM (28.09.2007 11:39:07) [7]
А что - превратим форум в информационный справочник и отвечающим тебя поставим.
← →
DVM © (2007-09-28 12:40) [9]
> Anatoly Podgoretsky © (28.09.07 11:57) [8]
Здесь многие сидят исключительно для того чтобы спорить. Сидят, ждут, когда кто-то допустит какую-либо ошибку или даже описку в высказываениях и тут то они набрасываются со своими спорами.
← →
DVM © (2007-09-28 12:42) [10]Причем о предмете спора зачастую не имеют ни малейшего представления и споря параллельно ищут себе информацию для контраргументов в поисковиках, желая показаться умнее и начитаннее. Я не прав?
← →
Инс © (2007-09-28 12:51) [11]
> и споря параллельно ищут себе информацию для контраргументов
> в поисковиках
Не имея представления о предмете спора невозможно найти правильную информацию для контраргументов. Обязательно ляпнешь какую-нибудь чушь абсолютно не в тему.
← →
Leonid Troyanovsky © (2007-09-28 12:52) [12]
> DVM © (28.09.07 12:40) [9]
> Сидят, ждут, когда кто-то допустит какую-либо ошибку или
> даже описку в высказываениях и тут то они набрасываются
Такова природа обсуждения.
Назначение данного форума, как и многих других,
избавлять(ся) от заблуждений, не дожидаясь
естественной смерти их носителей.
--
Regards, LVT.
← →
DVM © (2007-09-28 12:58) [13]
> Не имея представления о предмете спора невозможно найти
> правильную информацию для контраргументов
Правильную то невозможно. Но вот оценить, что информация неправильна зачастую ни одна из спорящих сторон не в состоянии, т.к. обе стороны плавают в вопросе обсуждения.
Не знаю, что меня потянуло на философствования.
← →
DVM © (2007-09-28 13:00) [14]
> Назначение данного форума, как и многих других,
> избавлять(ся) от заблуждений, не дожидаясь
> естественной смерти их носителей.
:) Google и WiKiPedia не скоро закроются.
← →
Leonid Troyanovsky © (2007-09-28 13:04) [15]
> DVM © (28.09.07 12:58) [13]
> Правильную то невозможно. Но вот оценить, что информация
> неправильна зачастую ни одна из спорящих сторон не в состоянии,
Значит, надо ждать третью ;)
Кста, это не философия, а просто расплывчатые фразы,
поконкретней - кто, где, когда и при каких обстоятельствах.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2007-09-28 13:06) [16]> Leonid Troyanovsky (28.09.2007 13:04:15) [15]
Явки, пароли
← →
Инс © (2007-09-28 13:08) [17]
> DVM © (28.09.07 12:58) [13]
Я кажется понимаю намек... Скажите пожалуйста, уважаемый, [7] и [9] - было направлено на меня или в воздух? Если ко мне то:
Вспоминаются два наших с вами спора. Первый - там что-то про функции, которые сами выделяют память. Я привел пример ConvertSidToStringSid. Поверьте, я не нашел его в гугле для того, чтобы подловить вас на неточности. Я и сам когда-то думал, что в WinAPI принято, что память всегда выделяет вызывающая сторона, пока сам не столкнулся с обратным. Доказательство того, что я с этим столкнулся раньше момента спора:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1322
Второй - это совсем недавнешний спор по WinAPI. Тут тоже дело не в поисковиках. Информацию для своих аргументов я брал из книг того же Рихтера, Харта, Соломона и Руссиновича да и из личных наблюдений. Просто я когда-то нашел время их прочесть и допускаю, что у некоторых такого времени быть не могло. Я не вижу в этом ничего плохого. Зато у других было время заняться чем-то другим, чем у меня времени не было.
← →
Johnmen © (2007-09-28 13:08) [18]
> Инс © (28.09.07 10:18) [3]
> Так, к сведению... Длина переменной string всегда равна 4 байтам.
Уверен?
Что за байты? Что в них?
← →
DVM © (2007-09-28 13:13) [19]
> Инс © (28.09.07 13:08) [17]
>
> > DVM © (28.09.07 12:58) [13]
>
> Я кажется понимаю намек... Скажите пожалуйста, уважаемый,
> [7] и [9] - было направлено на меня или в воздух? Если
> ко мне то:
Ну вы блин даете. Почему ж на вас? Тут каждая вторая ветка что подлиннее такая.
← →
Инс © (2007-09-28 13:14) [20]
> DVM © (28.09.07 13:13) [19]
Тогда прошу прощения. У меня была причина так подумать.
← →
Инс © (2007-09-28 13:38) [21]
> Johnmen © (28.09.07 13:08) [18]
Спорить будем? :) Давайте, только прежде чем начать, определимся с терминами, чтобы не было придирок к словам, а спор касался только сути. С моей стороны такие тезисы:
1. Говоря о типе string подразумеваю включенную директиву $H, что подразумевает AnsiString, а не ShortString, так как именно так и бывает в 99.9% случаев.
2. Подразумеваю компилятор D7, указанный в вопросе.
3. Между словами "переменной" и "string" в [3] упущенно слово "типа", так как оно явно читается из контекста.
← →
Anatoly Podgoretsky © (2007-09-28 13:51) [22]> Johnmen (28.09.2007 13:08:18) [18]
Или nil или указатель на структуру. Для длинных строк.
← →
Johnmen © (2007-09-28 13:55) [23]
> Инс © (28.09.07 13:38) [21]
Принимается.
Итак.
> Так, к сведению... Длина переменной string всегда равна 4 байтам.
Что за байты? Что в них?
← →
evvcom © (2007-09-28 13:56) [24]Опять понеслось :)
← →
Инс © (2007-09-28 13:58) [25]
> Что за байты? Что в них?
Анатолий ответил.
← →
evvcom © (2007-09-28 14:03) [26]
> DVM © (28.09.07 12:58) [13]
Я бы сказал проще, народу хочется поразвлечься. А то, что Инс © уловил намек, так мне то же самое показалось. Ну раз нет, тогда сорь.
← →
Anatoly Podgoretsky © (2007-09-28 14:04) [27]> Инс (28.09.2007 13:58:25) [25]
И помоему одназначно, по крайней мере для указаного типа.
← →
Инс © (2007-09-28 14:05) [28]
> Я бы сказал проще, народу хочется поразвлечься
А чем же еще заниматься в рабочее время :) Не работой же!
← →
Инс © (2007-09-28 14:05) [29]
> Anatoly Podgoretsky © (28.09.07 14:04) [27]
По-моему - тоже
← →
Johnmen © (2007-09-28 14:12) [30]
> Инс © (28.09.07 13:58) [25]
> > Что за байты? Что в них?
> Анатолий ответил.
Я спрашивал у тебя.
Если, конечно, тебе не трудно, всё же ответь.
← →
Инс © (2007-09-28 14:27) [31]
> Johnmen © (28.09.07 14:12) [30]
Переменная типа AnsiString представляет собой 32-битный указатель, значение которого равно nil в случае "" или указатель на некую структуру в памяти. В последнем случае сама строка находится в памяти, по адресу численно равному значению этого указателя. Если быть точнее - то указатель указывает именно на первый символ. По отрицательному смещению от него хранится служебная информация - длина строки и счетчик ссылок. Строка завершается нулевым символом.
В чем суть претензии?
← →
Инс © (2007-09-28 14:28) [32]
> или указатель на некую структуру в памяти.
или адрес некой структуры в памяти правильнее. Дабы не было придирок к словам.
← →
DVM © (2007-09-28 14:37) [33]
> evvcom © (28.09.07 14:03) [26]
Ну кто про себя знает, тот себя в моих словах увидел :)
← →
Германн © (2007-09-28 15:12) [34]
> evvcom © (28.09.07 13:56) [24]
>
> Опять понеслось :)
>
Во-во. Розыча на них нет :-)
← →
{RASkov} © (2007-09-28 15:50) [35]> [31] Инс © (28.09.07 14:27)
> Переменная типа AnsiString
> Строка завершается нулевым символом.
А я почему-то думал, что пофик какой там символ в конце строки....
← →
Инс © (2007-09-28 15:53) [36]
> А я почему-то думал, что пофик какой там символ в конце
> строки....
Нет, не пофиг, это сделано специально для совместимости с типом PChar.
← →
DVM © (2007-09-28 15:57) [37]Да оно и PChar - у пофиг, не пофиг функциям работающим с такими строками.
← →
Anatoly Podgoretsky © (2007-09-28 16:02) [38]> {RASkov} (28.09.2007 15:50:35) [35]
Зря думал, вредно.
← →
Anatoly Podgoretsky © (2007-09-28 16:02) [39]> DVM (28.09.2007 15:57:37) [37]
А функции работают не с PChar, а с ASCIIZ
← →
Инс © (2007-09-28 16:05) [40]
> Нет, не пофиг, это сделано специально для совместимости
> с типом PChar.
Правда важно понимать, что совместимость эта в общем то односторонняя.
← →
DVM © (2007-09-28 16:07) [41]
> А функции работают не с PChar, а с ASCIIZ
О каких функциях ведете речь?
Я в том смысле, что функциям надо знать где строка оканчивается.
← →
Anatoly Podgoretsky © (2007-09-28 16:10) [42]> Инс (28.09.2007 16:05:40) [40]
Полная
← →
evvcom © (2007-09-28 16:12) [43]
> Германн © (28.09.07 15:12) [34]
>
>
> > evvcom © (28.09.07 13:56) [24]
> >
> > Опять понеслось :)
> >
>
> Во-во. Розыча на них нет :-)
у него дела и поважнее есть. Наверное, уже Пашку пропивает :)
← →
Anatoly Podgoretsky © (2007-09-28 16:12) [44]> DVM (28.09.2007 16:07:41) [41]
Естественно, но к PChar это не относится, это изобретение Борланда, указатель на символ, а функции предполагаю, что за этим символом есть еще и один из них признак окончания строки. Сама аббревиатура означает (расшифровка) - ASCII (ansi) Zero
← →
Инс © (2007-09-28 16:17) [45]
> Полная
Не сказал бы. String физически соответствует PChar-у, но не наоборот. Но это не значит, что String можно всегда приводить к PChar и это будет безопасно. На уровне PChar компилятор забывает, что это особый финализируемый тип. Так что совместимость тут вообще постольку поскольку, только на определенном уровне.
← →
Инс © (2007-09-28 16:19) [46]
> Естественно, но к PChar это не относится, это изобретение
> Борланда, указатель на символ
PChar это не просто ^Char. Это тоже особый для компилятора тип.
← →
{RASkov} © (2007-09-28 16:32) [47]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:36) [48]
> Т.е. тип String это тот же самый PChar только со служебной частью в начале...
>
Ну если вспомнить про фаберже, то да. Но в "служебной части" то и все самое важное :-)
← →
Инс © (2007-09-28 16:36) [49]
> Т.е. тип String это тот же самый PChar только со служебной
> частью в начале...
Это финализируемый тип, со всеми вытекающими. Вот две хорошие статьи:
http://www.rsdn.ru/article/Delphi/dynarrays.xml
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1206
← →
Anatoly Podgoretsky © (2007-09-28 16:47) [50]> Инс (28.09.2007 16:19:46) [46]
Особый конечно, из-за требований по работе со строками.
Но для работы с WinApi он полностью совместимый.
← →
Инс © (2007-09-28 17:02) [51]
> Anatoly Podgoretsky © (28.09.07 16:47) [50]
Из-за того, что многие думают, что PChar и String полностью совместимы, очень часто возникают ошибки, особенно часто видишь советы передавать String-и между DLL и приложением под видом PChar, при этом не упоминая ряд ограничений.
← →
Германн © (2007-09-28 17:15) [52]
> особенно часто видишь советы передавать String-и между DLL
> и приложением под видом PChar
А за такие советы надо канделябром по морде.
← →
Anatoly Podgoretsky © (2007-09-28 19:14) [53]> Инс (28.09.2007 17:02:51) [51]
Это они уже виноваты, неправильно используют string, но это к PChar отношения не имеет.
Написать неправильно можно и для Integer - например MaxInt + 1 и отключение рантайм проверки
или for byte := 1 to 255 и удивляться некоторым эффектам.
← →
Anatoly Podgoretsky © (2007-09-28 19:14) [54]> Германн (28.09.2007 17:15:52) [52]
Не страшно, но не нужно и это не про канделябр.
Страницы: 1 2 вся ветка
Текущий архив: 2007.10.21;
Скачать: CL | DM;
Память: 0.58 MB
Время: 0.074 c