![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция копирования PChar в string [D6, D7, Win2k, WinXP]
MetalFan © (2006-10-16 17:57:00)что необходимо:
1) копировать содержимое string в Pchar
2) выделять/перевыделять память под PChar
3) очищать PChar, если длинна string = 0;
вот написана такая функция
function SetPChar( var APChar: PChar; const ACopyString: string): PChar;
var
lLenStr: Integer;
begin
Result := nil;
lLenStr := Length(ACopyString);
if (APChar = nil) and ( lLenStr= 0) then Exit;
if lLenStr = 0 then
begin
FreeMem( APChar{, 0});
APChar := nil;
end
else
begin
ReallocMem( APChar, lLenStr + 1);
//Result := StrLCopy(APChar, PChar(ACopyString), lLenStr);
CopyMemory( APChar, @ACopyString[1], lLenStr);
APChar[lLenStr] := #0;
end;
Result := APChar;
end;
оцените ее правильность %) что-то никак не соображу, есть ли тут косяки...
Ketmar (2006-10-16 19:09:00) [21]на:
function SetPChar (var aPChar: PChar; const aCopyString: string): PChar;
var
lLenStr: Integer;
begin
lLenStr := Length(aCopyString);
ReallocMem(aPChar, lLenStr);
if lLenStr > 0 then Move(aCopyString[1], aPChar^, lLenStr+1);
result := aPChar;
end;
MetalFan (2006-10-16 19:04:00) [22]нет, функция должна однозначно копировать содержимое входной string в pchar, чтобы дальнейшая судьба string'а никак не влияла на резульирующий pchar.
ладно, вопрос тот же: нет ли ошибок в функции в [0]?.
просто интересно мнение...
Leonid Troyanovsky (2006-10-16 18:43:00) [23]
> MetalFan © (16.10.06 18:08) [2]
> если p - внешнияя переменная, а s внутренняя, то после оконачния
> процедуры, где объявлена s, p будет указывать в... на...
> короче не туда)
Конечно, в никуда.
Самое простое - поменять ролями s & p, т.е., пусть p - внутренняя.
Ну, а освобождать строку просто: s := ''
--
Regards, LVT.
Ketmar (2006-10-16 18:40:00) [24]>[4] MetalFan(c) 16-Oct-2006, 18:33
>мм... и что, весь функционал в [0] оказывается ненужным?! )
угу. "наука умеет много гитик" (ц) %-)
MetalFan (2006-10-16 18:33:00) [25]мм... и что, весь функционал в [0] оказывается ненужным?! )
Eraser (2006-10-16 18:08:00) [26]> [1] Desdechado © (16.10.06 18:03)
> s:=String(p);
s := p;
UniqueString(s);
> p:=PChar(s);
p := PChar(s);
MetalFan (2006-10-16 18:08:00) [27]а происходит ли при это копирование содержания s и з.
если p - внешнияя переменная, а s внутренняя, то после оконачния процедуры, где объявлена s, p будет указывать в... на... короче не туда)
или нет?
Desdechado (2006-10-16 18:03:00) [28]
var p:Pchar;
s:String;
s:=String(p);
p:=PChar(s);