PChar和AnsiString的区别?AnsiString和windeString的区别?

LINUXFANS 2002-06-23 11:29:13
这是D5中的一段。我不明白PChar和AnsiString的区别是什么。为什么要调用PChar(S)?还要用RealizeLenght()该回来?

“注意在练习将一个字符串转换为PChar类型时要小心,因为字符串在超出其作用范围时有自动回收的功能,因此当进行P:=PChar(Str)的赋值时,P 的作用域(生存期)应当大于Str 的作用域。”

这段话是什么意思?P的作用域如果不大于Str回怎么样?

windeString中的每个字符是2个字节?AnsiString每个字符是1个字节那AnsiString和windeString的为什么可以直接转换。转换后的字节数是怎么定?

原文:
正如前面所提到,AnsiString 字符串总是null 结束的。因此,它能跟以null 结尾的字符串兼容,这
就使得调用Win32 API 函数或其他需要PChar 型字符串的函数变得容易了。只要把一个字符类型强制转
换为PChar 类型(在2 . 8 节“强制类型转换和类型约定”中将介绍强制类型转换)。下面的代码演示了怎
样调用Win32的GetWindowsDirectory( )函数,这个函数需要一个PChar类型的参数:
var
S:String;
begin
SetLength(S,256); //重要!首先给字符串分配空间
/ /调用A P I 函数,S 现在包含目录字符串
GetWindowsDirectory(PChar(S),256) ;
如果使用了将A n s i S t r i n g 字符串强制转换为PChar类型的函数和过程,在使用结束后,要手工把它
第2 章Object Pascal 语言2 7 下载
的长度恢复为原来以n u l l 结束的长度。STRUTILS单元中的RealizeLenght( )函数可以实现这一点:
procedure RealizeLength(var S:string);
b e g i n
SetLength(S,StrLen(PChar(S)));
e n d ;
调用ReallizeLength( ) :
var
S:string ;
begin
SetLength(S,256); //重要!首先给字符串分配空间
/ /调用函数,S 现在包含目录字符串
GetWindowDirectory(PChar(S),256) ;
RealizeLength(S); //设置S 的长度为n u l l 结束的长度
e n d ;
注意在练习将一个字符串转换为P C h a r 类型时要小心,因为字符串在超出其作用范围时有自动回收的功能,因此当进行P:=PChar(Str)的赋值时,P 的作用域(生存期)应当大于Str 的作用域。
...全文
143 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhourongbiao 2002-06-24
  • 打赏
  • 举报
回复
WideString是Unicode字符串,用2个字节表示一个字符,而AnsiString则用1个字节表示一个字符,但是目前所用的string大部分为AnsiString,但WideString在将来的使用不可避免。
xiaoxingchi 2002-06-24
  • 打赏
  • 举报
回复
D e l p h i有三种类型的字符:
• AnsiChar 这是标准的1字节的A N S I字符,程序员都对它比较熟悉。
• WideChar 这是2字节的U n i c o d e字符。
• Char 在目前相当于A n s i C h a r, 但在D e l p h i以后版本中相当于Wi d e C h a r.
记住因为一个字符在长度上并不表示一个字节,所以不能在应用程序中对字符长度进行硬编码,
而应该使用S i z e o f ( )函数。
注意Sizeof()标准函数返回类型或实例的字节长度。
===============字符串
字符串是代表一组字符的变量类型,每一种语言都有自己的字符串类型的存储和使用方法。
P a s c a l类型有下列几种不同的字符串类型来满足程序的要求:
• AnsiString 这是P a s c a l缺省的字符串类型,它由AnsiChar 字符组成,其长度没有限制,同时与
n u l l结束的字符串相兼容。
• ShortString 保留该类型是为了向后兼容Delphi 1.0,它的长度限制在2 5 5个字符内。
• WideString 功能上类似于A n s i S t r i n g,但它是由Wi d e C h a r字符组成的。
• PChar 指向n u l l结束的C h a r字符串的指针,类似于C的char * 或l p s t r类型。
• PAnsiChar 指向n u l l结束的A n s i C h a r字符串的指针。
• PWideChar 指向n u l l结束的Wi d e C h a r字符串的指针。
缺省情况下,如果用如下的代码来定义字符串,编译器认为是AnsiString 字符串:
v a r
S:string; //编译器认为S的类型是A n s i S t r i n g
当然,能用编译开关$ H来将s t r i n g类型定义为S h o r t S t r i n g,当$ H编译开关的值为负时, s t r i n g变量
是S h o r t S t r i n g类型;当$ H编译开关的值为正时(缺省情况),字符串变量是A n s i S t r i n g类型。下面的代码
演示了这种情况:
v a r
{ $ H - }
S1:string; //S1是S h o r t S t r i n g类型
{ $ H + }
S2:string; //S2是A n s i S t r i n g类型
使用$ H规则的一个例外是,如果在定义时特地指定了长度(最大在2 5 5个字符内),那么总是
S h o r t S t r i n g:
v a r
S: string[63]; //63个字符的S h o r t S t r i n g字符串
1. AnsiString类型
A n s i S t r i n g (或长字符串)类型是在Delphi 2.0开始引入的,因为Delphi 1.0的用户特别需要一个容易
使用而且没有2 5 5个字符限制的字符串类型,而A n s i S t r i n g正好能满足这些要求。
bcb_fans 2002-06-23
  • 打赏
  • 举报
回复
哇,说得那么复杂!!!

pchar是字符串指针,类似于c中的char*
AnsiString是Delphi中的String类型的C++模拟;
WideString与AnsiString类似,但支持Unicode.
代码下载地址: https://pan.quark.cn/s/d56c0ac7d9f6 交流群 telegram: https://t.me/autosymlink_channel 文档 https://.com/shenxianmq/Auto_Symlink/wiki Auto_Symlink 小白牙整理 项目简介 是一个自动化工具,专门设计用于管理通过 CloudDrive2/Alist 挂载到本地的网盘。 它能够创建软链接,使得像 Emby/Jellyfin/Plex 这样的媒体服务器能够更容易地刮削和读取内容,同时减少对网盘的频繁访问。 主要特性: 实时监控: 需要CloudDrive2的会员功能文件通知,监控指定目录,自动进行必要的更新和管理。 自动化处理: 创建与更新软链接/strm文件,自动复制与更新元数据。 清理功能: 清空无效文件夹和软链接,保持本地云端一致性。 转存监控: 在常用工具中,自动监控指定文件夹,转移到目标文件夹,并删除源文件 媒体库通知: 支持Emby/Plex通知,当检测到新视频的时候,会自动通知Emby/Plex扫描该视频,极大加块扫库速度 封面制作: 自动生成精美的Emby媒体库封面 Web 界面操作: 提供一个简洁易用的Web界面,用于查看日志、编辑配置和监控系统状态。 这使得用户能够更方便地管理和调整 Auto_Symlink 的运行。 更多功能可以去常用工具中自行发掘. -- 安装和使用 直接运行 Python 文件: - 在首次运行后, 文件夹中会生成 文件。 根据文件中的注释进行配置。 - 配置完成后,使用命令 运行。 - 在 Windows 系统中,需要以管理员模式运行。 Docker 运行: 使用以下命令运行 Dock...
内容概要:本文介绍了一种基于Simulink仿真实现的太阳能电池系统与五级逆变器集成方案,重点研究太阳能电池输出电压的存储机制及直流到交流的高效转换过程。系统将光伏阵列产生的直流电储存在蓄电池中,并通过五级逆变器将直流电压转换为高质量交流电,有效提升输出波形的稳定性和电能质量。该仿真模型详细构建了能量管理流程,涵盖最大功率点跟踪(MPPT)、充放电控制、逆变器调制策略等关键环节,适用于离网和并网两种运行模式,能够为可再生能源系统的能量转换效率、动态响应特性及控制策略优化提供可靠的技术支撑和仿真验证平台。; 适合人群:具备电力电子、自动控制与可再生能源系统基础知识的硕士、博士研究生、高校科研人员,以及从事新能源系统仿真与工程设计的电气工程师和技术研发人员。; 使用场景及目标:①用于撰写高水平学术论文(如EI、SCI收录期刊)中的系统建模与仿真分析部分;②开展太阳能发电系统中储能管理与多级逆变技术的性能评估与优化研究;③作为高校课程或实验教学案例,帮助学生深入理解多级逆变器在光伏发电系统中的实际应用与控制原理。; 阅读建议:建议结合提供的Simulink模型文件进行动手实践,重点关注五级逆变器的拓扑结构设计、PWM调制方式、滤波器参数配置及其对输出波形质量的影响,同时通过调整光照强度、负载变化等工况,深入分析系统的动态响应与稳定性,全面提升科研仿真与工程应用能力。

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧