首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文字转换为PChar / PAnsiChar

将文字转换为PChar / PAnsiChar
EN

Stack Overflow用户
提问于 2015-02-12 06:29:22
回答 1查看 910关注 0票数 2

我有个很蠢的问题..。为什么这个代码:

代码语言:javascript
复制
PChar('x');

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

示例:

代码语言:javascript
复制
var s: String;
...
s := StrPas(PAnsiChar('x'));

这会导致Delphi 5/ Delphi XE中的AV

或者这个:

代码语言:javascript
复制
Windows.MessageBox(0, PChar('x'), PChar('y'), 0);

这会导致Delphi 5中的AV,而在XE中的Delphi中不会出现空的MessageBox。

控制台示例:

代码语言:javascript
复制
program Project1;
{$APPTYPE CONSOLE}
uses
  SysUtils, Windows;
var s: String;
begin
  s := StrPas(PChar('xxx'));   // EAccessViolation here
end.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-12 07:17:01

代码语言:javascript
复制
StrPas(PAnsiChar('x'));

我假定'x'被视为字符文本而不是字符串文本。所以这个演员是无效的。如果是这样的话,这将如您所期望的那样起作用。

代码语言:javascript
复制
StrPas('x');

由于隐式转换。或

代码语言:javascript
复制
StrPas(PAnsiChar(AnsiString('x')));

多亏了显式的转换。

我认为前者可能是首选。文字不需要转换为空结束的指针类型。编译器可以在没有强制转换的情况下发出正确的代码。而强制转换总是冒着抑制错误的风险。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28470810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档