Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-68235
Alexey Nepryahin
2003-07-23 19:00
2003.08.21
MS Jet 4.0


3-68243
lereve
2003-07-25 20:22
2003.08.21
подскажите пож-та как лучше копирнуть данные из TClientDataSet


1-68307
Eugene_P
2003-08-06 15:22
2003.08.21
DDE -> VB -> MS WORD ?


1-68376
acsoft
2003-08-07 19:57
2003.08.21
Как программно навести курсор на ссылку в документе, загруженном


14-68526
Tahion2
2003-08-04 22:16
2003.08.21
Посоветуйте хороший рисовальщик графиков





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский