Форум: "Основная";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
ВнизString to PChar Найти похожие ветки
← →
Erden (2003-08-08 15:13) [0]Уважаемые мастера!
Как строку преобразовать в PChar?
← →
BOA_KAA (2003-08-08 15:15) [1]PChar();
← →
den74 (2003-08-08 15:15) [2]sChar:=PChar(sStrin)
← →
ilka (2003-08-08 15:16) [3]PChar(string)
← →
Palladin (2003-08-08 15:16) [4]прежде чем задать вопрос, зайди на яндекс и спроси его
http://www.yandex.ru/yandsearch?rpt=rad&text=%EA%E0%EA+%F1%F2%F0%EE%EA%F3+%EF%F0%E5%EE%E1%F0%E0%E7%EE%E2%E0%F2%FC+%E2+pchar
← →
Erden (2003-08-08 15:16) [5]А есть какие-нибудь функции преобразования?
← →
mOOx_ (2003-08-08 15:17) [6]А этого тебе мало?
← →
panov (2003-08-08 15:18) [7]string handling routines (null-terminated) в Help
← →
Андрей Сенченко (2003-08-08 15:21) [8]Дык Тебе ж дали функцию преобразования.
p1 := pchar(s1);
Или под "Функцией преобразования" подразумевается нечто с названием никак не меньше, чем
MakePleasePcharVariableFromThisString ()
?
← →
Emfi (2003-08-08 16:22) [9]StrPCopy подойдет ? :-)
← →
Digitman (2003-08-08 16:28) [10]
> Как строку преобразовать в PChar?
никак.
← →
Anatoly Podgoretsky (2003-08-08 16:43) [11]PChar это вообще не строка.
← →
Digitman (2003-08-08 16:51) [12]
> Anatoly Podgoretsky
именно)
← →
tria (2003-08-08 19:10) [13]Отводишь сначала под переменную память длиной в строку+1 символ, потом преобразовуешь одной из описанных выше функций.
← →
Chlavik (2003-08-08 19:21) [14]Но не забываем что Pchar всего навсего указатель.... При приравнивании перменных типа PChar сама строка не копироуется просто обе переменные будут указывать на ту же строку ... Так что если надо: =>GetMem =>strcopy....freemem (когда строка не нада будет)
← →
Anatoly Podgoretsky (2003-08-08 19:49) [15]А при приравнивании указателей PChar на буфера, буфера также не копируются, так что достаточно сделать PChar(S) и этот указатель в общеи случае будет указывать на этот буфер завершенный нулем.
← →
Андрей Сенченко (2003-08-08 19:57) [16]Anatoly Podgoretsky © (08.08.03 19:49)
А можно в качестве просвещения указать "не общий" случай ?
← →
Anatoly Podgoretsky (2003-08-08 20:09) [17]Есть различие между
p1 := p2
и
p2 := PChar(S)
в некоторых случаях, а конкретно S := ""
Поэтому применен термин "в общем случае"
← →
Reindeer Moss Eater (2003-08-08 20:12) [18]Надо помнить, что для string существует механизм подсчета ссылок, а для PChar - нет.
Поэтому правильного ответа на заданный вопрос в такой постановке не существует.
← →
Anatoly Podgoretsky (2003-08-08 20:16) [19]Ты намекаешь на возможное изменение адреса, но оно справедливо в обоих случаях, его надо обеспечить неизменным на весь период использования. Смысл применения PChar(S) очень велик при передачи строки в Win API функцию.
← →
Reindeer Moss Eater (2003-08-08 20:20) [20]Я намекаю на то, что надо знать для чего конкретно потребовалось иметь PChar.
Для передачи параметра в Win API функцию PChar(S) конечно же подходит. Если только s остается в пределах видимости пока используется PChar(S).
← →
Андрей Сенченко (2003-08-08 20:29) [21]Reindeer Moss Eater © (08.08.03 20:20)
Ну тогда для дальнейшего просвещения : что такое "выход за пределы видимости" стринговой переменной ? Она может поменять свой адрес в памяти даже если не было переприсвоения в процессе работы приложения или нет ?
Прямая постановка вопроса наверное будет звучать так : Всегда ли работоспособна конструкция вида
Некая_API_функция(Pchar(стринговая_переменная))
?
← →
Anatoly Podgoretsky (2003-08-08 20:43) [22]Выход за пределы относится и к обычным буферам, если они локальны в функции
Переменная сама адрес не поменяет, тем более это не сделает АПИ функция.
Всегда
← →
Anatoly Podgoretsky (2003-08-08 20:45) [23]Обоснование для всегда, АПИ функция ничего не знает где этот дарес хранится, поэтому она просто не может при всем желании этого сделать.
← →
Андрей Сенченко (2003-08-08 20:57) [24]черт. Где ж вы литературу то раскапываете по этому делу ... Или все настолько профессионально владеют английским, что свободно читают родные исходники ? Не верю.
Сорри за офтопик
← →
Anatoly Podgoretsky (2003-08-08 21:22) [25]Ну по последнему пункту, никакой литературы не надо, достаточно подумать головой.
← →
Palladin (2003-08-08 21:22) [26]литературы полно
у тебя под носом
пока я это не понял, я тоже был "некомпетентным" :)
← →
panov (2003-08-08 22:56) [27]to all:
может быть, будем немного меньше ерничать.
Люди учатся и пусть учатся.
то, что для вас ясно, для них нет.
← →
Fog (2003-08-08 23:04) [28]Сори, а нахрена енто надо ваще? Ведь когда нужен PChar адрес стринга сгодица!
← →
Palladin (2003-08-08 23:17) [29]
> panov © (08.08.03 22:56)
ок :)
что такое string.
Поднимем историю развития паскаля, еще без образования таких мощных вещей как OWL и тп. Простейшее определеие
var
s:String; {, в то время именно в паскале обозначало ничего иного как array [1..255] of char; причем была у этого string некая особенность, и заключалась она в том что если мы вдруг наберемся смелости и объявим s:string[10] то в этом случае, если же мы опять же вдруг осмелимся обратиться к s[0] мы вдруг получим длинну строки, независимую от той длинны которая объявленна в секции var, мало ли чего там описано... }
Но, как только вступила в свои права windows все разработчики пререстали поддреживать этот несчастный длинный указатель. PChar. Которую разработчики Delphi не приминули воспользоватся и соотворили на основе её compiler magic...
Если есть есче вопросы, соответсвенно вопрошайте, я в чате...
← →
Anatoly Podgoretsky (2003-08-08 23:45) [30]Я бы не осмелился, только если бы другого метода не было. Обращаться к S[0] как к символу это как то неверно, а прямые манипуляции с нею хоть и допустимы, но попазивают хакерством (рубить грубым инструментом). Хорошо что Борланд сделало прозрачным оба типа строк.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.008 c