Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
11-1164310958
_gandalf_
2006-11-23 22:42
2007.07.08
Кому чего в KOLnMCK не хватает?


15-1181357065
Slider007
2007-06-09 06:44
2007.07.08
С днем рождения ! 9 июня 2007 суббота


15-1180987047
Курдль
2007-06-04 23:57
2007.07.08
Поиск работников.


1-1178612822
nali
2007-05-08 12:27
2007.07.08
Обмен значениями между потоками


4-1170172330
GrayFace
2007-01-30 18:52
2007.07.08
Сравнение имен файлов как в Explorer - чтобы 1 шел перед 100





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский