需要使用从c dll里传来的数组,函数声明中返回的是PPChar,我必须要知道PPChar的长度,才可以获取其中的内容,但是该如何做呢?我试了一下,直接inc似乎是不正确的.
function getSize(arr : PPChar) : Integer;
var
i: Integer;
begin
while arr^ <> NIL then
begin
inc(i);
inc(arr);
end;
result := i;
end;
function getSize(arr : PPChar) : Integer;
var
i: Integer;
begin
while arr^ <> NIL then
begin
inc(i);
inc(arr);
end;
result := i;
end;
function getSize(arr : PPChar) : Integer;
var
p: PChar;
begin
Result := 0;
p := PChar(arr^);
while p^ <> #0 then
begin
inc(Result);
inc(p);
end;
end;
var
P: PChar;
Pp: PPChar;
I: Integer;
begin
P := 'DElPHI';
Pp := @P; ShowMessage('长度:' + IntToStr(StrLen(pp^)));
for I := 1 to StrLen(pp^) do
begin
ShowMessage(PP^^); // 取单个字符
Inc(PP^);
end;
end
arr^^ 要解除指针引用俩次才会取到单个字符
p1 = pp^;
inc(pp);
p2 = pp^;
inc(pp);
...但是这个长度不知道如何得到,在delphi里二级指针似乎不能像pchar指针那样方便地检查结束位置
function ppcharTest() : Integer;
var
char1, char2: pchar;
charP :^pchar;
charP2 : ^pchar;
i : Integer;
begin
i:=0;char1 := 'first';
char2 := 'second';charP := @char1;
charP2 := charP; // charP2应该是一个指向array of char的指针,也就是一个ppchar吧inc(charP);
charP := @char2;// dec(charP); //这个时候,我理解charP^应该等于char1,但是在我这里显示乱码, 不知道为什么dec和inc的行为不是可逆的// 我理解这样应该能够求出ppchar的长度
while charP2 <> NIL then
begin
inc(i);
inc(charP2);
end;show(i); // 在这里i总是16,不知道为什么
end;
你加个干什么? 最外层的指针的值 你根本不需要去改的, 你要改的只是 charp2^ pchar 指针的值
sizeof(arr^) div Sizeof(arr^[0])
#include <iostream>
using namespace std;int main()
{
char* a[3] = {"abc", "cds", "sds"};
char*(*a1)[3] = &a; cout<<sizeof(*a1) / sizeof(*a1[0])<<endl;
return 0;
}
他给你传的是不是a1?
while charP2 <> NIL then
这样的语句编译器也认?
这样有没取到长度?
sizeof(arr^) div Sizeof(arr^[0])可以取到长度,但是不对阿