Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.61 MB
Время: 0.022 c
2-1190694479
Сергей1985
2007-09-25 08:27
2007.10.21
Подскажите как объединить две таблицы


6-1172175913
NikOracul
2007-02-22 23:25
2007.10.21
Как программно создать модемное соединение с интернетом?


6-1171358206
SergGG
2007-02-13 12:16
2007.10.21
MailSlot поймать реального клиента


15-1190354682
vajo
2007-09-21 10:04
2007.10.21
Vista & XP


1-1186554726
Dr. Andrew
2007-08-08 10:32
2007.10.21
Как по нажатию кнопки вставить символ в ElTreeInplaceEdit?