procedure TInterfaceFrm.Button7Click(Sender: TObject);
var
vWrtie: Cardinal;
vTmpStr: String;
vPointer: Pointer;
vSize, vTwoSize: Integer;
begin
vTmpStr := '你好看看啊';
vSize := length(vTmpStr);
vPointer := HeapAlloc(FMemHeap, $8, vSize);
ZeroMemory(vPointer, vSize);
Move(PChar(vTmpStr)^, vPointer^, vSize);
vTmpStr := PChar(vPointer);
ShowMessage(vTmpStr);
HeapFree(FMemHeap, 0, vPointer);
vPointer := nil;
end;如上简短的代码,vPointer 为什么会出现得到结果是这个: '你好看看啊铪铪铪'
也就是后面多了个尾巴,那位大牛解析一下!
var
vWrtie: Cardinal;
vTmpStr: String;
vPointer: Pointer;
vSize, vTwoSize: Integer;
begin
vTmpStr := '你好看看啊';
vSize := length(vTmpStr);
vPointer := HeapAlloc(FMemHeap, $8, vSize);
ZeroMemory(vPointer, vSize);
Move(PChar(vTmpStr)^, vPointer^, vSize);
vTmpStr := PChar(vPointer);
ShowMessage(vTmpStr);
HeapFree(FMemHeap, 0, vPointer);
vPointer := nil;
end;如上简短的代码,vPointer 为什么会出现得到结果是这个: '你好看看啊铪铪铪'
也就是后面多了个尾巴,那位大牛解析一下!
我这里不就是做初始化了吗??
没有符串结束符#0这个倒是真的啊! 这个重要。
vSize: Integer;
vTmpStr: String;
vPointer: Pointer;
begin
vTmpStr := '你好看看啊';
vSize := length(vTmpStr);
vPointer := HeapAlloc(FMemHeap, $8, vSize + 1);
Move(PChar(vTmpStr)^, vPointer^, vSize);
vTmpStr := PChar(vPointer);
ShowMessage(vTmpStr);
HeapFree(FMemHeap, 0, vPointer);
vPointer := nil;
end;
呵呵,这样就解决了,谢谢unsigned(僵哥(自然界因不公平生生不息)) 的指导
1. 其实HeapAlloc(FMemHeap, $8, vSize + 1); $8是就是把内存清零操作了。
2. 所以在申请内存的时候多申请一个存储#0解决问题