Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.08;
Скачать: CL | DM;

Вниз

FillChar для строки   Найти похожие ветки 

 
begin...end ©   (2007-05-26 17:19) [40]

> Однокамушкин   (26.05.07 10:43) [21]

> Видимо, имелся ввиду s[1]... Но это тоже корректно только
> если s<>"", а то будет то же av...

AV не будет. Может быть только Range Check Error -- если, конечно, включена опция Range Checking.


 
Однокамушкин   (2007-05-26 17:40) [41]


> Dmitry_177   (26.05.07 16:42) [38]
> т.е. с "^" на конце..

Правильно, про ^ я просто забыл...


> begin...end ©   (26.05.07 17:19) [40]
> AV не будет. Может быть только Range Check Error -- если,
>  конечно, включена опция Range Checking.

Ну да, конкретно здесь не будет, потому что не будет обращения к этому указателю... А вообще, словить av там, где s[1] при s="" очень просто...


 
Dmitry_177   (2007-05-27 01:00) [42]

Однокамушкин, н  а в api как лучше вставлять строки pchar(str) или pointer(str)^ ?


 
Германн ©   (2007-05-27 01:34) [43]


> а в api как лучше вставлять строки pchar(str) или pointer(str)^
> ?

pchar(str) разумеется. Это вполне нормально.


 
Германн ©   (2007-05-27 01:36) [44]

P.S. Поскольку это "Начинающие", то в [43] я не прикалываюсь, а говорю с полной ответственностью.


 
Однокамушкин   (2007-05-27 07:37) [45]


> Dmitry_177   (27.05.07 01:00) [42]
> Однокамушкин, н  а в api как лучше вставлять строки pchar(str)
> или pointer(str)^ ?

А это вообще сильно зависит от того, куда вы их собираетесь вставлять... в api есть типы LPTSTR и LPCTSTR, в Delphi они переводятся одинаково - PChar, но на самом деле смысл их разный... LPTSTR - это обычный указатель на строку, когда встречается параметр такого типа, это значит, что содержимое строки api-функция скорее всего будет менять, а вот LPCTSTR - это указатель на константное содержимое, т.е. данные по этому указателю api-функция будет только читать, но не модифицировать... соответственно, во втором случае можно передавать указатель на немодифицируемую память, чего никак нельзя делать в случае LPTSTR...

В общем, для LPCTSTR правила такие: можно передавать либо строковый литерал (т.е. просто константу), либо строку, приведённую к PChar... PChar, кстати, потому и заменяется на вызов _LStrToPChar, чтобы корректно обрабатывать именно передачу LPCTSTR-парамеров... Так что тут только два варианта: строковый литерал или приведение к PChar...

А вот для LPTSTR правила другие... там надо передавать либо nil, если вам, с одной стороны, результат не нужен, а с другой функция это допускает, либо указатель на реальный буфер, который надо заранее выделить, никакие литералы здесь уже недопустимы... И если буфер делается через string, то тут почти без разницы, как её приводить - через PChar или через Pointer, потому что для не пустой строки разницы между этим операциями не будет, разве что Pointer чуть-чуть побыстрее...


 
Dmitry_177   (2007-05-27 18:38) [46]

т.е. грубо говоря если в функцию передается строка которая будет модифицироваться в самой этой функции, то лучше передавать ее как Pointer(str)^, а если для чтения то PChar(str)?


 
Однокамушкин   (2007-05-27 20:36) [47]


> Dmitry_177   (27.05.07 18:38) [46]

В общем-то да... за исключением того, что если строка передаётся для записи, и размер буфера известен во время написания программы, то со string"ом можно и не связываться, достаточно буфера array[0..N] of Char


 
Dmitry_177   (2007-05-27 20:52) [48]

Спасибо большое тебе..:)


 
имя   (2007-06-12 03:36) [49]

Удалено модератором


 
имя   (2007-06-12 03:36) [50]

Удалено модератором



Страницы: 1 2 вся ветка

Текущий архив: 2007.07.08;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.023 c
2-1181729900
antid
2007-06-13 14:18
2007.07.08
помощь нуубу


2-1182062398
..::KraN::..
2007-06-17 10:39
2007.07.08
Как узнать букву диска?


15-1180961295
Nic
2007-06-04 16:48
2007.07.08
Rave-отчёты и проблемы с кодировкой


4-1169557572
5n4k3
2007-01-23 16:06
2007.07.08
drag&amp;drop ИЗ ListBox в Проводник


2-1181839775
Zero
2007-06-14 20:49
2007.07.08
procedure TMainForm.FormCreate