function FillBuffer(Buf:PChar;Count:Integer):Integer
begin
. . .
end;
// assume MAX_SIZE is a predefined constant
var
i: Integer;
buf: array[0..MAX_SIZE] of char;
S: string;
begin
i := FillBuffer(0, buf, SizeOf(buf)); // treats buf as a PChar
S := buf;
//statements
end;
buf是一个char数组,而FillBuffer中对应的位置是pchar类型,
i := FillBuffer(0, buf, SizeOf(buf)); // treats buf as a PChar
S := buf;我想知道这个buf是如何操作的,是怎么样放到fillbuffer中得到buf的值的。
begin
. . .
end;
// assume MAX_SIZE is a predefined constant
var
i: Integer;
buf: array[0..MAX_SIZE] of char;
S: string;
begin
i := FillBuffer(0, buf, SizeOf(buf)); // treats buf as a PChar
S := buf;
//statements
end;
buf是一个char数组,而FillBuffer中对应的位置是pchar类型,
i := FillBuffer(0, buf, SizeOf(buf)); // treats buf as a PChar
S := buf;我想知道这个buf是如何操作的,是怎么样放到fillbuffer中得到buf的值的。
2)function FillBuffer(Buf:PChar;Count:Integer):Integer
var
szBuf: PChar;
C: Char;
begin
szBuf := Buf;
while Count > 0 do
begin
C := Buf^;
ShowMessage(C);
Inc(szBuf);//szBuf++
Dec(Count);
end;
end;
我如何给buf赋值。
因此 buff: array [0..10] of Char;与pbuff : PChar;
pbuff := AllocMem(11);是一样的。至于拷贝操作,推荐 StrLCopy, 它可以指定拷贝到长度,避免了 StrCopy 拷贝时潜在的缓冲区溢出的问题。
同样字符串合并之类的函数 StrCat 也有带长度参数的版本 StrLCat,推荐用这类函数。
pbuff := AllocMem(11); // 是在堆上,需要自己手动 FreeMem(pbuff),但是大小上不像 栈上那么严格。