如何将空终止字符串转换为字符串?

WeG*_*ars 6 delphi delphi-xe7

我想将一些数据记录存储到磁盘.我希望每个数据记录具有相同的大小,以便我可以快速计算并跳转到某个记录.所以,我将记录中唯一的字符串存储为chars数组:

type TFileNameIO = array[1..512] of Char;
Run Code Online (Sandbox Code Playgroud)

从磁盘读取字符串后,我的字符串内容如下:

c:\ windows#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0等

我想截断#0字符,我做这样的事情:

function GetFileName(DiskName: TFileNameIO): string;
VAR PC: PChar;
begin
 SetString(Result, PChar(@DiskName), Length(DiskName));     <----- here Result is: c:\windows#0#0#0 etc
 PC:= PChar(Result);
 Result:= WideCharToString(PC);
end;
Run Code Online (Sandbox Code Playgroud)

还有更好的方法吗?

Rem*_*eau 6

您可以PChar直接将null终止分配给String:

function GetFileName(DiskName: TFileNameIO): string;
begin
 Result := PChar(@DiskName);
end;
Run Code Online (Sandbox Code Playgroud)

只需确保TDiskName始终包含空终止符.如果它可以完全填满没有null的字符,你将不得不这样做:

function GetFileName(DiskName: TFileNameIO): string;
var
 Len, I: Integer;
begin
  Len := 0;
  For I := Low(DiskName) to High(DiskName) do
  begin
    if DiskName[I] = #0 then Break;
    Inc(Len);
  end;
  SetString(Result, PChar(@DiskName), Len);
end;
Run Code Online (Sandbox Code Playgroud)