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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.014 c
1-68281
anri
2003-08-06 12:03
2003.08.21
Проверка на соответствие типу


3-68219
I/O
2003-07-28 09:30
2003.08.21
Какая процедура?


1-68289
Micah'GF
2003-08-06 16:57
2003.08.21
Избавиться от мигания TImage


1-68389
Olegka
2003-08-07 17:30
2003.08.21
Диалог сохранения в папку


1-68268
h@1f-e1f
2003-08-07 09:57
2003.08.21
---|Ветка была без названия|---