![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как работает функция pos ? [D2, D3, D4, D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
BFG9k © (2005-02-14 14:43:00)Сначала использовал функцию Pos для динамического обьема данных, представленного как PChar (но не заканчивающегося нулем). Иногда функция вылезает за этот обьем при поиске- Invalid pointer operation, access violation.
Скопировал данные в строку (везде избавился от PChar). Вроде ошибки исчезли, но недавно снова возникли (не на моей машине - отловить проблематично). Вопрос такой: отличается ли работа Pos со строкой и PChar ? Кажется, строка тоже не кончается нулем. Есть ли защита от проникновения в другую область памяти ? Например, может приниматься во внимание длина строки.
Георгий Бедный (2005-02-21 21:23:00) [1]Спасибо! Действительно, "ларчик просто открывался". :)
Вот, например, когда-то так же было с WinMPQ. Пытался написать сам, да, вроде, подумалось, что название больно звучное - надо поискать. И что вы думаете?! - Нашёл-таки! Вот тебе и линии вероятности, ешь-его-в-вервольфа-душу-мать! ;)
begin...end (2005-02-19 21:15:00) [2]> Георгий Бедный (19.02.05 21:06) [5]
Да, она так и называется - PosEx. См. справку.
Георгий Бедный (2005-02-19 21:06:00) [3]А есть такая же функция (типа Pos), но чтобы искала, начиная с нужного символа (нужно для текстового редактора)??
Пример:
function PosEx(StartSymbolNum: Longint): longint;
han_malign (2005-02-14 17:06:00) [4]> отличается ли работа Pos со строкой и PChar
- происходит неявное преобразование к строке, если это не явный массив of char(с детерминированной длиной) - то без контроля длинны - по нулевому символу... Длинну нужно ручками контролировать, скажем через SetString.
icWasya (2005-02-14 16:14:00) [5]>Кажется, строка тоже не кончается нулем.
Начиная с D2 String (он же AnsiString) всегда заканчивается нулём.
Digitman (2005-02-14 15:07:00) [6]
> BFG9k
приведи код
Marser (2005-02-14 14:55:00) [7]Отличается. И даже больше - Pos с PChar не работает, с PChar работает StrPos