我有以下程式。
var a: PChar := PChar('abc');
ShowMessage(Format('%p - %p', [@a, a]));
當我運行它時,我得到了這個錯誤:
Project Project1.exe 引發例外類 EConvertError,并帶有訊息“格式 '%p - %p' 無效或與引數不兼容”。
問題是a不能格式化為%p. 但據我了解, PChar 被定義為^Char. 所以 PChar 本質上是一個指向 Char 的指標。這是一個指標。為什么不能格式化為%p? 以下代碼可以正常作業:
var c: Char := 'x';
var a := @c;
Format('%p - %p', [@a, a]); // 0019F364 - 0019F36A
uj5u.com熱心網友回復:
的最后一個引數Format()是一個array of const(本質上是一個 的陣列TVarRec)。型別化PChar指標存盤在TVarRec.VPChar欄位 ( TVarRec.VType=vtPChar) 中,而非型別化指標存盤在TVarRec.VPointer欄位 ( TVarRec.VType=vtPointer) 中。%p僅VPointer欄位支持說明符。該欄位僅%s支持說明符VPChar。
因此,如果您PChar想Pointer使用%p.
我已向 Embarcadero 提交了一份報告:
RSP-37775:更新 SysUtils.Format() 以允許 %p 用于所有型別的指標
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450312.html
上一篇:如何找到一個大陣列中的所有回文?
