Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Вниз

Как склеить два Pchar   Найти похожие ветки 

 
Roxtady   (2002-08-22 16:48) [0]

То есть для string это просто "s1:=s1+s2". А как для PChar ? "P1:=P1+P2" - не катит...


 
ZremBy   (2002-08-22 16:55) [1]

function StrCat(Dest: PChar; const Source: PChar): PChar;


 
ZZ   (2002-08-22 16:55) [2]

function StrCat(Dest: PChar; const Source: PChar): PChar;

Description

Use StrCat to concatenate Source to the end of Dest. StrCat does not perform any length checking. The destination buffer must have room for at least StrLen(Dest)+StrLen(Source)+1 characters.

To check length, use the StrLCat function.


 
Ученик   (2002-08-22 16:56) [3]

WinApi.lstrcat


 
ZrenBy   (2002-08-22 16:56) [4]

function StrCat(Dest: PChar; const Source: PChar): PChar;


 
Roxtady   (2002-08-22 16:59) [5]

Не подходит. Strcat описана в sysutils. А я не хочу подключать sysutils к проекту.


 
Roxtady   (2002-08-22 17:01) [6]

хотя ладно. Я выдерну тело функции Strcat из sysutils, благо, выдирать немного надо...


 
ZZ   (2002-08-22 17:02) [7]

Хе-хе.. не посмотрел что за форум :))


 
watcher   (2002-08-22 17:05) [8]

а скопировать из того же sysutils слабо ?
(для ленивых)

function StrCat(Dest: PChar; const Source: PChar): PChar;
begin
StrCopy(StrEnd(Dest), Source);
Result := Dest;
end;

function StrCopy(Dest: PChar; const Source: PChar): PChar;
asm
PUSH EDI
PUSH ESI
MOV ESI,EAX
MOV EDI,EDX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
NOT ECX
MOV EDI,ESI
MOV ESI,EDX
MOV EDX,ECX
MOV EAX,EDI
SHR ECX,2
REP MOVSD
MOV ECX,EDX
AND ECX,3
REP MOVSB
POP ESI
POP EDI
end;

function StrEnd(const Str: PChar): PChar; assembler;
asm
MOV EDX,EDI
MOV EDI,EAX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
LEA EAX,[EDI-1]
MOV EDI,EDX
end;


 
Лохматый   (2002-08-22 17:09) [9]

S1:= StrPas(P1)+StrPas(P2);
StrPCopy(P, S1); // P - склеенная нуль-терминальная строка

Что-нибудь в этом духе...


 
Alx2   (2002-08-22 17:11) [10]

> "P1:=P1+P2" - не катит...

Катит :)

P1 := PChar(String(P1)+String(P2));


 
Esu   (2002-08-22 17:15) [11]


> StrCat does not perform any length checking

Вот тут нужно проверочку делать обязательно на размер буфера. А то всяко бывает и взломы по этой дырке очень распространены.


 
Eugen Honeker   (2002-08-22 17:15) [12]

люди добрые, есть же аналоги на апи:
lstrcpy -> StrCopy
lstrcat -> StrCat


 
Игорь Шевченко   (2002-08-22 17:17) [13]

Нда...


 
Roxtady   (2002-08-22 17:20) [14]

Выражаю большие претензии к администратору. В том то и дело, что надо склеить строки именно средставми WinApi.

То есть не функцией StrCopy, а функцией WinApi lstrcpy.

Пожалуйста, впредь внимательней читайте текст...


 
Alx2   (2002-08-22 17:23) [15]

>именно средставми WinApi.
Совсем запрещено String использовать?


 
Игорь Шевченко   (2002-08-22 17:38) [16]

Как все запущено...


 
Roxtady   (2002-08-22 17:44) [17]

Alx2, нет конечно. String использовать можно.

Игорь Шевченко, я понимаю, что вы здесь самый умный. Но помимо комментариев типа "Как все запущено..." и "Нда..." может посоветуете что-нибудь ?


 
Игорь Шевченко   (2002-08-22 17:45) [18]

Roxtady (22.08.02 17:20)
Выражаю большие претензии к администратору. В том то и дело, что надо склеить строки именно средставми WinApi.

Может, справку почитать, перед тем как претензии выражать ?
Вам здесь НИКТО НИЧЕГО НЕ ДОЛЖЕН.
Это так, к сведению.




 
Roxtady   (2002-08-22 19:24) [19]

Игорь Шевченко, не понял вашей мысли. Какую мне справку почитать ? Win32 SDK ? Так я только и делаю, что ее читаю. Просто я не знал, что есть WinApi функция для скрепления двух строк. Поэтому спросил.

Соответственно, если функция WinApi"шная, то она имеет право быть в конференции посвященной WinApi. Правильно ? Вот я и заявил претензии модератору.

Я и не говорил, что мне здесь кто-то что-то должен. Я просто хочу разобраться и поэтому спрашиваю у людей, разбирающихся лучше меня в данном вопросе.

Поэтому не понимаю ваших наездов. Чем я вас обидел ?


 
Alx2   (2002-08-23 07:33) [20]

>Roxtady (22.08.02 17:44)
Тогда смотри "Alx2 © (22.08.02 17:11)"
Или из WinAPI использовать - дело принципа?


 
Roxtady   (2002-08-23 11:57) [21]

Alx2, вы про P1 := PChar(String(P1)+String(P2)); ? Вы сами то пробовали ? Я до этого тоже так хотел сделать, но получается какая-то фигня, а не скоеивание...


 
Alx2   (2002-08-23 17:20) [22]

>Roxtady (23.08.02 11:57)
>Вы сами то пробовали ? Я до этого тоже так хотел сделать,
>но получается какая-то фигня, а не скоеивание...
Я обычно проверяю свои ответы на практике. Вы - не исключение. А код работает.

Var
P1,P2, P3 : PChar;
begin
P2 :="Этот пример ";
P3 := "работает";
P1 := PChar(String(P2)+String(P3));
ShowMessage(P1);
End;


 
Alx2   (2002-08-23 17:29) [23]

>? Я до этого тоже так хотел сделать, но получается какая-то >фигня, а не скоеивание...

Пардон, может все идет от того, что я неправильно понимаю что значит склеивание? И конкатенация строк "не катит"?


 
Roxtady   (2002-08-23 18:13) [24]

Alx2, ммм. Все дело в том, что это не совсем то, что я хотел.

У вас P1 := PChar(String(P2)+String(P3)) - а у меня что-то типа P2 := PChar(String(P2)+String(P3)); - и вот это не катит. И в вашем ответе тоже самое:

Alx2 © (22.08.02 17:11)
> "P1:=P1+P2" - не катит...

Катит :)

P1 := PChar(String( P1)+String(P2));


 
Roxtady   (2002-08-23 22:43) [25]

Alx2, то есть, в моем примере и в вашем постинге от 22.08.02 17:11 склеиваемая строка присваивается одной из частей из которыхх склеивается эта самая строк...


 
Alx2   (2002-08-26 08:00) [26]

>Roxtady (23.08.02 22:43)
>в моем примере и в вашем постинге от 22.08.02 17:11 склеиваемая
>строка присваивается одной из частей из которыхх склеивается
>эта самая строк...
И этот вариант тоже работает. Только надо все-таки разбить подобное присваивание на два этапа, дабы не потерять линк на ранее занимаемую память.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.009 c
3-13953
sel
2002-08-16 11:33
2002.09.05
экспорт Excel


1-13990
DIM0N
2002-08-25 21:46
2002.09.05
Ресурсы


1-14116
skyslider
2002-08-21 01:15
2002.09.05
Мастера ! Где хранить изображения в моей программе?


1-14112
Бегинер
2002-08-23 18:54
2002.09.05
Свойства объектов


4-14354
annew
2002-07-03 09:36
2002.09.05
Каким образом можно сделать со свойствами Spedia Bar-a ?





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