![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как склеить два Pchar
Roxtady © (2002-08-22 16:48:00)То есть для string это просто "s1:=s1+s2". А как для PChar ? "P1:=P1+P2" - не катит...
Alx2 (2002-08-26 08:00:00) [1]>Roxtady (23.08.02 22:43)
>в моем примере и в вашем постинге от 22.08.02 17:11 склеиваемая
>строка присваивается одной из частей из которыхх склеивается
>эта самая строк...
И этот вариант тоже работает. Только надо все-таки разбить подобное присваивание на два этапа, дабы не потерять линк на ранее занимаемую память.
Roxtady (2002-08-23 22:43:00) [2]Alx2, то есть, в моем примере и в вашем постинге от 22.08.02 17:11 склеиваемая строка присваивается одной из частей из которыхх склеивается эта самая строк...
Roxtady (2002-08-23 18:13:00) [3]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));
Alx2 (2002-08-23 17:29:00) [4]>? Я до этого тоже так хотел сделать, но получается какая-то >фигня, а не скоеивание...
Пардон, может все идет от того, что я неправильно понимаю что значит склеивание? И конкатенация строк "не катит"?
Alx2 (2002-08-23 17:20:00) [5]>Roxtady (23.08.02 11:57)
>Вы сами то пробовали ? Я до этого тоже так хотел сделать,
>но получается какая-то фигня, а не скоеивание...
Я обычно проверяю свои ответы на практике. Вы - не исключение. А код работает.
Var
P1,P2, P3 : PChar;
begin
P2 :="Этот пример ";
P3 := "работает";
P1 := PChar(String(P2)+String(P3));
ShowMessage(P1);
End;
Roxtady (2002-08-23 11:57:00) [6]Alx2, вы про P1 := PChar(String(P1)+String(P2)); ? Вы сами то пробовали ? Я до этого тоже так хотел сделать, но получается какая-то фигня, а не скоеивание...
Alx2 (2002-08-23 07:33:00) [7]>Roxtady (22.08.02 17:44)
Тогда смотри "Alx2 © (22.08.02 17:11)"
Или из WinAPI использовать - дело принципа?
Roxtady (2002-08-22 19:24:00) [8]Игорь Шевченко, не понял вашей мысли. Какую мне справку почитать ? Win32 SDK ? Так я только и делаю, что ее читаю. Просто я не знал, что есть WinApi функция для скрепления двух строк. Поэтому спросил.
Соответственно, если функция WinApi"шная, то она имеет право быть в конференции посвященной WinApi. Правильно ? Вот я и заявил претензии модератору.
Я и не говорил, что мне здесь кто-то что-то должен. Я просто хочу разобраться и поэтому спрашиваю у людей, разбирающихся лучше меня в данном вопросе.
Поэтому не понимаю ваших наездов. Чем я вас обидел ?
Игорь Шевченко (2002-08-22 17:45:00) [9]Roxtady (22.08.02 17:20)
Выражаю большие претензии к администратору. В том то и дело, что надо склеить строки именно средставми WinApi.
Может, справку почитать, перед тем как претензии выражать ?
Вам здесь НИКТО НИЧЕГО НЕ ДОЛЖЕН.
Это так, к сведению.
Roxtady (2002-08-22 17:44:00) [10]Alx2, нет конечно. String использовать можно.
Игорь Шевченко, я понимаю, что вы здесь самый умный. Но помимо комментариев типа "Как все запущено..." и "Нда..." может посоветуете что-нибудь ?
Игорь Шевченко (2002-08-22 17:38:00) [11]Как все запущено...
Alx2 (2002-08-22 17:23:00) [12]>именно средставми WinApi.
Совсем запрещено String использовать?
Roxtady (2002-08-22 17:20:00) [13]Выражаю большие претензии к администратору. В том то и дело, что надо склеить строки именно средставми WinApi.
То есть не функцией StrCopy, а функцией WinApi lstrcpy.
Пожалуйста, впредь внимательней читайте текст...
Игорь Шевченко (2002-08-22 17:17:00) [14]Нда...
Eugen Honeker (2002-08-22 17:15:00) [15]люди добрые, есть же аналоги на апи:
lstrcpy -> StrCopy
lstrcat -> StrCat
Esu (2002-08-22 17:15:00) [16]
> StrCat does not perform any length checking
Вот тут нужно проверочку делать обязательно на размер буфера. А то всяко бывает и взломы по этой дырке очень распространены.
Alx2 (2002-08-22 17:11:00) [17]> "P1:=P1+P2" - не катит...
Катит :)
P1 := PChar(String(P1)+String(P2));
Лохматый (2002-08-22 17:09:00) [18]
S1:= StrPas(P1)+StrPas(P2);
StrPCopy(P, S1); // P - склеенная нуль-терминальная строка
Что-нибудь в этом духе...
watcher (2002-08-22 17:05:00) [19]а скопировать из того же 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;
ZZ (2002-08-22 17:02:00) [20]Хе-хе.. не посмотрел что за форум :))