gpt4 book ai didi

delphi - 将文字转换为 PChar/PAnsiChar

转载 作者:行者123 更新时间:2023-12-02 12:49:46 24 4
gpt4 key购买 nike

我有一个非常愚蠢的问题......为什么这段代码:

PChar('x');

导致“访问冲突”错误?编译器优化?

示例:

var s: String;
...
s := StrPas(PAnsiChar('x'));

这会导致 Delphi 5/Delphi XE 中出现 AV

或者这个:

Windows.MessageBox(0, PChar('x'), PChar('y'), 0);

这会在 Delphi 5 中导致 AV,但在 Delphi XE 中则不会在XE中有一个空的MessageBox

控制台示例:

program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var s: String;
begin
s := StrPas(PChar('xxx')); // EAccessViolation here
end.

最佳答案

StrPas(PAnsiChar('x'));

我认为 'x' 被视为字 rune 字而不是字符串文字。所以 Actor 阵容无效。如果是这样,那么这将按您的预期工作

StrPas('x');

由于隐式转换。或者

StrPas(PAnsiChar(AnsiString('x')));

感谢显式转换。

我认为前者可能是首选。文字不需要转换为空终止的指针类型。编译器无需强制转换即可发出正确的代码。并且强制转换总是冒着抑制错误的风险。

关于delphi - 将文字转换为 PChar/PAnsiChar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28470810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com