Форум: "Начинающим";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.045 c