K
K
Unregistered / Unconfirmed
GUEST, unregistred user!
PByteArray = ^TByteArray;
TByteArray = array[0..MaxInt div SizeOf(Byte) - 1] of Byte;
function TcxTokensStack.StackTokensToStr(ATokens: PByteArray): string;
var
AWStr: WideString;
begin
SetLength(AWStr, ATokens^[1]);
if ATokens^[1] > 0 then
Move(ATokens^[3], AWStr[1], ATokens^[1] shl 1);
Result := AWStr;
end;
用调试器查看ATokens^[1]是8,这个ATokens^[1]中是一个字符串"平台印刷"
SetLength(AWStr, ATokens^[1])执行后AWStr为'平台印刷'#0'0!'#0,正确结果应是'平台印刷'没有后面的#0'0!'#0
我有2个问题:
1、我第一次调控件源码,对ATokens^[1]这种形式不理解,ATokens^[1]中是存储的字符串地址吗?但为什么用调试器查看是8正好是字符串的长度。如果是存储的字符串长度那又是如何将字符串赋给AWStr?
2、如何更改代码来正确处理中文字符串,英文串没有这个问题。
谢谢各位
TByteArray = array[0..MaxInt div SizeOf(Byte) - 1] of Byte;
function TcxTokensStack.StackTokensToStr(ATokens: PByteArray): string;
var
AWStr: WideString;
begin
SetLength(AWStr, ATokens^[1]);
if ATokens^[1] > 0 then
Move(ATokens^[3], AWStr[1], ATokens^[1] shl 1);
Result := AWStr;
end;
用调试器查看ATokens^[1]是8,这个ATokens^[1]中是一个字符串"平台印刷"
SetLength(AWStr, ATokens^[1])执行后AWStr为'平台印刷'#0'0!'#0,正确结果应是'平台印刷'没有后面的#0'0!'#0
我有2个问题:
1、我第一次调控件源码,对ATokens^[1]这种形式不理解,ATokens^[1]中是存储的字符串地址吗?但为什么用调试器查看是8正好是字符串的长度。如果是存储的字符串长度那又是如何将字符串赋给AWStr?
2、如何更改代码来正确处理中文字符串,英文串没有这个问题。
谢谢各位