gpt4 book ai didi

string - PChar/PWideChar/PAnsiChar 转换中是否有任何编译器魔法?

转载 作者:行者123 更新时间:2023-12-03 18:53:56 25 4
gpt4 key购买 nike

我经常读到编译器在转换为 PChar 时会产生某种魔力。 .
PChar的主要目的|是在期望零终止字符数组(C 风格的“字符串”)的库中调用外部代码。
PCharPWideChar 的别名类型关于 Unicode Delphi 和 PAnsiChar 的别名在非 unicode Delphi 上。

另一方面,Delphi 字符串( string = AnsiString/UnicodeString ,我在这里不是在谈论 WideString,更不用说 ShortString ...)具有隐藏长度而不是终止字符。它们也被引用计数并在写入时使用复制。

Delphi 字符串是否自动分配并使用隐式 #0 字符保持一个字符长,以便强制转换为 PChar (PAnsiChar/PWideChar) 更容易或当遇到转换为 PChar 时,编译器会检查和调整字符串吗? ?

最佳答案

过程如下:

  • 如果一个字符串 s长度大于零,则 PChar(s)返回指向字符串内容的第一个元素的指针。因为string设法拥有一个隐藏的空终止符,无需再做任何事情。
  • 如果一个字符串 s长度为零,则 PChar(s)返回指向包含空终止符的内存块的指针。

  • 作为实现细节,从 PChar(nil) 返回的空终止符是在已编译模块的只读部分中分配的全局常量。

    Are Delphi strings automatically allocated and kept to be one char longer with an implicit #0 char in order to make casting to a PChar (PAnsiChar / PWideChar) easier?



    是的。

    如果你可以这么说的话,神奇之处在于:
  • 使用 PChar()在空字符串上返回一个指向空终止符的指针。
  • Delphi 在字符串末尾保留隐藏的空终止符。
  • 关于string - PChar/PWideChar/PAnsiChar 转换中是否有任何编译器魔法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980880/

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