Jen*_*off 1 delphi string pointers casting
我经常读到编译器在转换时会产生某种魔力PChar.
主要目的PChar是在库中调用期望零终止字符数组(C样式"字符串")的外部代码.
PChar是一种类型,它是PWideCharUnicode Delphi的别名,PAnsiChar是非unicode Delphi 的别名.
另一方面,Delphi字符串(string= AnsiString/ UnicodeString,我不是在WideString这里谈论,更不用说ShortString......)有一个隐藏的长度而不是终止字符.它们也被引用计数并在写入时使用副本.
Delphi字符串是否自动分配,并且使用隐式#0 char保持为一个char更长,以便PChar更容易转换为(PAnsiChar/PWideChar),或者编译器在遇到转换时检查并调整字符串PChar?
Dav*_*nan 11
过程如下:
s长度大于零,则PChar(s)返回指向字符串内容的第一个元素的指针.因为string被设法有一个隐藏的空终止符,所以不需要做更多的工作.s长度为零,则PChar(s)返回指向包含空终止符的内存块的指针.作为实现细节,返回的空终止符是PChar(nil)在已编译模块的只读部分中分配的全局常量.
Delphi字符串是否自动分配,并且使用隐式#0 char保持为一个char更长,以便更容易地向PChar(PAnsiChar/PWideChar)进行转换?
是.
如果可以称之为魔术,那就是:
PChar()在空字符串上使用会返回指向null终止符的指针.